用C语言编写:输入两个数,输出其所有的公因子。
答案:2 悬赏:10 手机版
解决时间 2021-03-26 03:20
- 提问者网友:精神病院里
- 2021-03-25 03:37
用C语言编写:输入两个数,输出其所有的公因子。
最佳答案
- 五星知识达人网友:玩家
- 2021-03-25 05:12
#include
int main()
{int a,b,c,i;
scanf("%d%d",&a,&b);
c=afor(i=1;i<=c;i++)
if(a%i==0&&b%i==0)
printf("%d ",i);
return 0;
}
全部回答
- 1楼网友:风格不统一
- 2021-03-25 05:30
#include
main()
{
int n, i;
scanf("%d", &n);
for(i = 2; n != 1; i++)
{
while(n % i == 0)
{
n /= i;
printf("%d ", i);
}
}
}
追问不对耶,我说的是输入两个数,你这才1个。追答#include
main()
{
int n, i, m;
scanf("%d %d", &n, &m);
n *= m;
for(i = 2; n != 1; i++)
{
while(n % i == 0)
{
n /= i;
printf("%d ", i);
}
}
}追问while里的程序是不是有问题? n=n/i,然后就输出i?追答没问题啊,一个数可能存在多个相同的因子吧。比如8:
8%2==0,8/2=4,输出2
4%2==0,4/2=2,输出2
2%2==0,2/2=1,输出2
1%2!=0,跳出while()循环。
n==1了,跳出for()循环。追问懂了,谢谢。不过我求公因子,假设输入5和6,公因子应该为1,按程序,输出是30的所有因子,是吗?追答应该是先求最大公约数,然后把最大公约数分解了。#include
int gcd(int m, int n)
{
int r = m % n;
while(r != 0)
{
m = n;
n = r;
r = m % n;
}
}
main()
{
int n, i, m;
scanf("%d %d", &n, &m);
n = gcd(m, n);
for(i = 2; n != 1; i++)
{
while(n % i == 0)
{
n /= i;
printf("%d ", i);
}
}
printf("%d", n);
}最后一个输出的始终为1,可以直接在n=gcd(m,n);后面改为直接写printf("1");
main()
{
int n, i;
scanf("%d", &n);
for(i = 2; n != 1; i++)
{
while(n % i == 0)
{
n /= i;
printf("%d ", i);
}
}
}
追问不对耶,我说的是输入两个数,你这才1个。追答#include
main()
{
int n, i, m;
scanf("%d %d", &n, &m);
n *= m;
for(i = 2; n != 1; i++)
{
while(n % i == 0)
{
n /= i;
printf("%d ", i);
}
}
}追问while里的程序是不是有问题? n=n/i,然后就输出i?追答没问题啊,一个数可能存在多个相同的因子吧。比如8:
8%2==0,8/2=4,输出2
4%2==0,4/2=2,输出2
2%2==0,2/2=1,输出2
1%2!=0,跳出while()循环。
n==1了,跳出for()循环。追问懂了,谢谢。不过我求公因子,假设输入5和6,公因子应该为1,按程序,输出是30的所有因子,是吗?追答应该是先求最大公约数,然后把最大公约数分解了。#include
int gcd(int m, int n)
{
int r = m % n;
while(r != 0)
{
m = n;
n = r;
r = m % n;
}
}
main()
{
int n, i, m;
scanf("%d %d", &n, &m);
n = gcd(m, n);
for(i = 2; n != 1; i++)
{
while(n % i == 0)
{
n /= i;
printf("%d ", i);
}
}
printf("%d", n);
}最后一个输出的始终为1,可以直接在n=gcd(m,n);后面改为直接写printf("1");
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯