每日一练蓝桥杯C/C++B组~既约分数
【摘要】 每日一练蓝桥杯C/C++B组~既约分数题目描述本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。如果一个分数的分子和分母的最大公约数是 1,这个分数称为既约分数。例如 3/4 ,1/8 ,7/1,都是既约分数。请问,有多少个既约分数,分子和分母都是 1 到 2020之间的整数(包括 1和 2020)?答案:2481215#include<iostream>using ...
每日一练蓝桥杯C/C++B组~既约分数
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
如果一个分数的分子和分母的最大公约数是 1,这个分数称为既约分数。
例如 3/4 ,1/8 ,7/1,都是既约分数。
请问,有多少个既约分数,分子和分母都是 1 到 2020之间的整数(包括 1和 2020)?
答案:2481215
#include<iostream>
using namespace std;
int gcd(int a,int b){
//辗转相除法求最大公约数
return b == 0 ? a:gcd(b,a%b);
}
int main(){
int ans = 0;
for(int zi = 1;zi <= 2020;zi++){
for(int mu = 1;mu <= 2020;mu++){
if(gcd(zi,mu) == 1){
ans++;
}
}
}
cout << "ans = " << ans << endl;
return 0;
}
代码思路:
既约分数声明ans初始化0,分子分母for循环,gcd(zi,mu)求最大公约数为1,既约分数加1。
int main(){
int ans = 0;
for(int zi = 1;zi <= 2020;zi++){
for(int mu = 1;mu <= 2020;mu++){
if(gcd(zi,mu) == 1){
ans++;
}
}
}
cout << "ans = " << ans << endl;
return 0;
}
辗转相除法,如果b为0,则返回a,否则返回gcd,那么b等于0,相当a对b取余等于0,a返回上一回b值。你可以把它当成一个公式背下来.
int gcd(int a,int b){
//辗转相除法求最大公约数
return b == 0 ? a:gcd(b,a%b);
}
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)