|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
int main()
{
int k,count=0,i,j,m,y=1;
for(i=1;i<=2020;i++)
{
for(j=1;j<=2020;j++)
{
m=i<j?i:j; 将i和j里面小的一个赋值给m
for(k=m;k>1;k--)
{
if((i%k==0)&&(j%k==0))
y=k; //将i和j的公约数k赋值给y
}
if(y==1) //前面定义了y=1;如果上面的if一次都没有执行,说明i和j在1到m没有公约数,则y肯定为1,则i和j的最大公约数为1,count++
count++;
}
}
printf("%d",count);
return 0;
}
//我这个是求i和j的最大公约数(i和j都是1到2020的数字),如果最大公约数是1,则count++,最后输出最大公约数为1的个数,我看了一下我的算法,感觉没毛病,真的,但是结果就是错的
本帖最后由 jitianmoshen 于 2020-12-9 23:38 编辑
- #include<stdio.h>
- #define MAX 2020
- int gcd(int a, int b);
- int main(void)
- {
- int i, j, count = 0;
- for (i = 1; i < MAX; i++)
- {
- for (j = i + 1; j <= MAX; j++)
- {
- if (gcd (i,j) == 1)
- {
- //printf("%d %d\n",i,j);
- count++;
- }
- }
- }
- printf("一共有%d对最大公约数为1的数\n",count);
- return 0;
- }
- int gcd(int a, int b)
- {
- int m, c;
- //m = a * b; //求最小公倍数时有用
- c = a % b;
- while (c)
- {
- a = b;
- b = c;
- c = a % b;
- }
- return b;
- }
复制代码
|
|