题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
如果一个分数的分子和分母的最大公约数是 1,这个分数称为既约分数。
例如
3
4
{3\over 4}
43 、
1
8
{1\over 8}
81、
7
1
{7\over 1}
17, 都是既约分数。
请问,有多少个既约分数,分子和分母都是 1 到 2020 之间的整数(包括 1 和 2020)?
实现代码
#include<bits/stdc++.h>
using namespace std;
bool jiyue(int a,int b)
{
for(int i=2;i<=max(a,b);i++)
{
if(a%i==0 && b%i==0)
{
// 有公约数返回 0
return 0;
}
}
// 没公约数返回 1
return 1;
}
int main()
{
int count=0;
for(int mu=1;mu<=2020;mu++)
{
for(int zi=1;zi<=2020;zi++)
{
if(jiyue(zi,mu))
{
count++;
}
}
}
cout<<count<<endl;
}
解题思路
首先循环分子和分母,在循环里判断它们是否为既约分数,如果是就给 count 加 1,不是的话继续循环。判断既约分数的函数很好写,输入两个数,判断两个数是否有共同的约数,如果有就返回 0,循环结束都没有返回 0,就返回 1,表明这两个数是既约分数。
注意点
- 注意判断既约分数的函数,for 循环的范围要算上 max(a,b),因为有时候分子分母一样,就会多算。
bool jiyue(int a,int b)
{
for(int i=2;i<=max(a,b);i++)
{
if(a%i==0 && b%i==0)
{
// 有公约数返回 0
return 0;
}
}
// 没公约数返回 1
return 1;
}