题目:
先上代码,再来分析:
#include <stdio.h>
int main()
{
int M,N,a1,m,t,n1,n;
scanf("%d %d",&M,&N);
n1=M*N;
if(M>N){
a1=M%N;
t=N;
while(a1!=0){t=a1;a1=N%a1;N=t;}
m=t;}
if(M==N){m=M;}
if(M<N){
a1=N%M;
t=M;
while(a1!=0){t=a1;a1=M%a1;M=t;}
m=t;}
n=n1/m;
printf("%d %d",m,n);
return 0;
}
分析:
1)求两个数的最大公约数,我们使用—“辗转相除法”:比如说我们设两个数分别为511,292;
@1:用大数除以较小数: 511/292=1余219
@2:用原来的较小的数除以上一步余数: 292/219=1余73
@3:用上一步较小数除以上一步结果余数:219/73=3;
说明511与292的最大公约数为73!这就是辗转相除法。
2)求两个数的最小公倍数:就用两个数的乘积除以二数的最大公约数即可;
细看代码:
n1的值对于求最小公倍数很有用,先求出;
我们输入了M,N的值按照辗转相除法要先看哪个大哪个小,才能进行下一步的计算;
a1即M/N的余数,这里我们引入t来保存N的最开始的值,这一点很重要