题目
请问在 1 到 2020 中,有多少个数与 2020 互质,即有多少个数与 2020 的最大公约数为 1。
思路
题目的本质就是想找出1-2020之间有的多少个数与2020的最大公约数为1。下面分析具体做法:
1.定义一个变量count,用来计数。遍历1-2020,求出各个数与2020的最大公约数,判断最大公约数是否=1,是的话count+1。
2.构造一个函数求任意一个数与2020的最大公约数的值为多少。(这里用辗转相除法求两个数的最大公约数)
代码实现
#include <stdio.h>
//实现求两个数最大公约数的函数
int gys(int a,int b){
int t=a%b;
while(t!=0){
a=b;
b=t;
t=a%b;
}
return b;
}
int main()
{
int count=0;
for(int i=1;i<2020;i++){
//判断是否互质
if(gys(2020,i)==1){
count++;
}
}
printf("%d\n",count);
return 0;
}