使用欧几里得法求最大公约数
其原理就是让两数相除,每次将其被除数与余数相除,直至其余数能够取0时,其除数就为它的最大公约数。
c++中更方便的可以不用自己自定义,可以使用 __gcd(i,j)==1;
效率更高一些。
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
如果一个分数的分子和分母的最大公约数是 11,这个分数称为既约分数。
例如 \frac{3}{4} ,\frac{1}{8} ,\frac{7}{1}43,81,17, 都是既约分数。
请问,有多少个既约分数,分子和分母都是 11 到 20202020 之间的整数(包括 11 和 20202020)?
运行限制
- 最大运行时间:2s
- 最大运行内存: 128M
#include <bits/stdc++.h>
using namespace std;
int gcd(int i,int j){
if(i<j){
swap(i,j);
}
if(i%j ==0){
return j;
}
return gcd(j,i%j);
}
int main()
{
// 请在此输入您的代码
int sum=0;
for(int i=1;i<=2020;i++){
for(int j=1;j<=2020;j++){
if(gcd(i,j)==1){
sum++;
}
}
}
cout<<sum;
return 0;
}
事例二:
#include<stdio.h>
#include<algorithm>
using namespace std;
int main(){
int ans=0;
for(int i=1;i<=2020;i++){
for(int j=1;j<=2020;j++){
if (__gcd(i,j)==1)
ans++;
}
}
printf("%d",ans);
}