试题:
求最大公约数,不得不提到欧几里得算法(gcd).
欧几里得算法又称为辗转相除法。
例如,求123和456的最大公约数:(123,456)
123%456=123
(123,456)=(456,123)
456%123=87
(456,123)=(123,87)
123%87=36
(123,87)=(87,36)
87%36=15
(87,36)=(36,15)
36%15=6
(36,15)=(15,6)
15%6=3
(15,6)=(6,3)
6÷3=2(余0)
所以123,456的最大公约数为3,即(123,456)=3;
程序设计:
#include <stdio.h>
int main()
{
int a,b,c;
scanf("%d%d",&a,&b);
while(b!=0)
{
c=a%b;
a=b;
b=c;
}
printf("%d",a);
return a;
}
输入:123 456
输出:3
因此,试题的代码为:
#include <stdio.h>
//欧几里得算法求最大公约数
int gcd(int a,int b) //定义欧几里得算法
{
if(a%b==0) return b;
return gcd(b,a%b);
}
int main()
{
int m,n,count,sum;
count=sum=0;
for(m=1;m<=2020;m++)
{
for(n=m+1;n<=2020;n++)
{
if(gcd(m,n)==1)
{
count++;
}
}
}
sum=count*2+1;
printf("%d",sum);
}
答案:2481215