求教输入两个正整数MN求最大公约数和最小公倍数用C编

来源:百度知道 编辑:UC知道 时间:2024/05/17 05:55:09
用C语言怎样编啊,麻烦写出关键步骤,谢谢了!

我作业编的,你看一下吧
#include <stdio.h>
main()
{
int m,n,i;
printf("请输入需要求解的两个数:");
scanf("%d%d",&m,&n);
if (m<n){i=m;m=n;n=i;}
for (i=m;1;i++)
{if ((i%m==0)&&(i%n==0))
{
printf("两数的最小公倍数是 %d\n",i);
break;
}
}
for (i=n;1;i--)
{if ((m%i==0)&&(n%i==0))
{
printf("两数的最大公约数是 %d\n",i);
break;
}
}
}

楼上用的是穷举法。C教材上有另一种较简单实用的方法的。我只讲一下算法的例子:
如:63和49
1.63%49=14 //用大的数和小的数取余,为零则结束->除数即为最小公约数)
2.49%14=7 //用刚才的除数作新的被除数,余数为新的除数,继续求余
3.14%7=0 //余数为0,当前除数为最小公约数
7就是最大公约数。
7*63=441 //大的数乘以最大公约数得最小公倍数。
441就是最小公倍数了。

int s = 1;
for (int i = 2; i < (m>n?m:n);i++)
if (m%i == 0 && n%i == 0)
s = i;
printf("最大公约数: %d 最小公倍数: %d",s,m*n/s);