2173 ProjectEuler 71

1.0 秒 131,072.0 KB 20 分 初学者3级题
考虑分数a / b,其中a和b是正整数,如果a < b且a和b的最大公约数是1,我们说他是既约真分数。
我们升序列出所有b <= 8的既约真分数:

1/8, 1/7, 1/6, 1/5, 1/4, 2/7, 1/3, 3/8, 2/5, 3/7, 1/2, 4/7, 3/5, 5/8, 2/3, 5/7, 3/4, 4/5, 5/6, 6/7, 7/8

可以发现,比3/7小的最大的既约真分数是2/5。
输入n,问满足b <= n的既约真分数,比3/7小的最大是多少?

输入
输入第一行组数T,
接下来T行,每行一个整数n。
(1 <= T <= 20)
(1 <= n <= 1000000)
输出
对于每组数据,输出两个数字a,b表示既约真分数,中间用空格隔开。
输入样例
3
8
5
1000000
输出样例
2 5
2 5
428570 999997

分析

分数q/p<3/7分数化简为q<3*p/7,由于分母p的枚举范围固定,我们想要把分子q用分母p表示出来。由于q<3*p/7,分子最大值可以取q=(3*p-1)/7,让分子 -1
用一个r和s去不断更新p在枚举过程中分数q/p的最大值,只要满足
r/s<q/p,也即r * p<s *q就更新r和s的值,直到枚举结束,输出r和s对应的值.

其实,这里q也可以取其他值,比如-0.005也AC

q=(3*p-0.005)/7;

代码

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;int T,n,q;int main(){cin>>T;while(T--){cin>>n;int r=0,s=1;//要求分子小于分母for(int p=1;p<=n;p++){q=(3*p-1)/7;if(r*p<=s*q){r=q;s=p;}}cout<<r<<" "<<s<<endl;}
}

补充知识

最大公约数的写法,但是没有用到
欧几里得辗转相除法

gcd(a,b)=gcd(a,a mod b)//a>b

最简单的最大公约数gcd的写法,递归写法如下
调用时不用区分x和y的大小

int gcd(int x,int y){if(y==0) return x;if(x<y) return gcd(y,x);else return gcd(y,x%y);
}

但是c++库函数自带最大公约数的算法,位于头文件algorithm中__gcd(x, y)
求两个数的最大公约数,如__gcd(3,9) 就返回3。
所以以后用的话直接调用__gcd,而不是自己写。

51Nod-2173 ProjectEuler 71相关推荐

  1. 51Nod 2188 ProjectEuler 24

    考虑0, 1, 2,共3个数字的所有排列,按字典序排列为 012 021 102 120 201 210 输入n,考虑0, 1, 2, 3, 4, 5, 6, 7, 8 和 9 共10个数字的所有排列 ...

  2. 51Nod 2176 ProjectEuler 3 c/c++题解

    题目描述 13195 的质因数有 5, 7, 13 和 29. 输入n,输出n最大的质因数. 输入 输入第一行组数T, 接下来T行,每行一个整数n. (1 <= T <= 20) (2 & ...

  3. 51Nod ProjectEuler 48

    考虑求和 11+22+33+⋯+1010=1040507131711+22+33+⋯+1010=10405071317  输入n,求 11+22+33+⋯+nn11+22+33+⋯+nn 对 1010 ...

  4. 51Nod 1494 选举拉票(权值线段树)

    http://www.51nod.com/Challenge/Problem.html#!#problemId=1494 题解 一开始有start个人投自己,num表示当前已经收买了多少人,从大到小枚 ...

  5. 51nod 省选联测 R2

    51nod 省选联测 R2 上场的题我到现在一道都没A,等哪天改完了再写题解吧,现在直接写第二场的. 第二场比第一场简单很多(然而这并不妨碍我不会做). A.抽卡大赛:http://www.51nod ...

  6. Problem 71:Ordered fractions

    Problem 71:Ordered fractions 题目链接:http://static.projecteuler.net/problem=71 题目大意:将所有形如$\frac{n}{d}(d ...

  7. 【胡搞的不能AC的题解,暴力搜索一发博弈问题】1995 三子棋 - 51Nod

    1995 三子棋 题目来源: syu校赛 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 原题链接: https://www.51nod.com/onlineJudge/ ...

  8. 51Nod——T 1631 小鲨鱼在51nod小学

    https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1631 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 ...

  9. 计算机考研大学报录比,2022考研:71所院校历年考研报录比汇总!

    小编给22考研的小伙伴整理了71所院校报录比,清楚报录比,才能更好的选对院校,祝大家成功上岸!金程考研小编给大家分享下:2022考研:71所院校历年考研报录比汇总!希望对大家有帮助~ 加小助手微信(备 ...

最新文章

  1. UVa11770 - Lighting Away(排序+DFS)
  2. Oracle入门(三B)之11G新特性 SYSASM 角色用来管理ASM
  3. 《C++ Primer 第五版》第二章(1-4小节)------基本内置类型,初始化和赋值及声明和定义,指针和引用,const和constexpr
  4. Python Pycharm Anacanda 区别
  5. IE浏览器开发人员工具怎么使用
  6. 信息服务器怎么恢复,服务器数据恢复怎么弄
  7. vue实现搜索框搜索新增_基于Vue el-autocomplete 实现类似百度搜索框功能_含真_前端开发者...
  8. [HeadFirst-HTMLCSS学习笔记][第八章扩大你的词汇量]
  9. String replaceAll()
  10. 微信小程序登陆注册界面前后端完整代码展示
  11. 云盘行业的“冰与火”
  12. linux下添加用户并开通samba访问
  13. django项目-自助饮料机
  14. UML图学习之五 序列图(顺序图)和协作图
  15. 【linux/shell】Centos7环境搭建、服务器搭建(脚本)
  16. CM311-1A 卡刷 + 线刷、刷安卓与 Armbian 教程
  17. python3 打印目录下所有模块_使用 Python 函数进行模块化
  18. 数字化转型服务管理与VeriSM(1):灵魂三问
  19. Apscheduler结合flask进行动态任务管理
  20. 全新的Unity移动游戏优化解决方案

热门文章

  1. java(13)内部类
  2. 柯里化(Curing)
  3. 由隐藏层节点数引起的网络准确率的不规则变化02
  4. TCL with SNPS sizeof_collectionget_object_namefindget_libslist_attributes
  5. 类和对象——对象特性——this指针的用途
  6. 【整理】电容知识小结(二)
  7. 【声源定位】 球面散乱数据插值方法/似然估计hybrid spherical interpolation/maximum likelihood (SI/ML) 麦克风阵列声源定位
  8. 3.MATLAB界面介绍
  9. stm32 keil下不重启进行仿真寻找bug原因
  10. 译:Spring Data Repository 不区分大小写查询