题解:
(1)遍历分子,分母。范围(1-2020)
(2)算法判断两个数的最大公约数为1。
最大公约数定义:
几个自然数中公有的约数,叫做这几个数的公约数,而其中最大的那个叫做最大公约数。
求最大公约数的方法有很多种(可以搜索头条百科,有编程方法提供),这里介绍辗转相除法。
辗转相除法(又称欧几里德算法):
先求其中任意两个数的最大公约数,再求这个最大公约数与第三个数的最大公约数,依次如此,直到最后一个数。最后所得的那个最大公约数为所有这些数的最大公约数。
辗转相除法代码:
#include<stdio.h>
int main()
{
int i,j;
int ret;
scanf("%d %d",&i,&j);
while(i%j)
{
ret=i%j;
i=j;
j=ret;
}
printf("%d",j);
}
验证例子:
因此可以得到既约分数的代码:
#include<stdio.h>
int zuida_gys(int i,int j)
{
int ret;
while(i%j)
{
ret=i%j;
i=j;
j=ret;
}
return j ;
}
int main()
{
int i,j;
int count=0;
for(i=1; i<=2020; i++)
{//分子遍历
for(j=1; j<=2020; j++ )
{//分母遍历
if(zuida_gys(i,j)==1)
{//返回结果比较,相等则计数
count++;
}
}
}
printf("%d",count);
}
答案:有2481215个既约分数。