可以运用辗转相除法,
即:(326,78)=(78,326%78);
(78,14) =(14,78%14);
(14 ,,8 ) =(8,14%8);
(8,6) =(6,8%6);
(6,,2) = (2,,6%2=0);
此时结束;这个时候2就是最大公约数
所用原理是:
1:(a,b)=(a,ka+b),其中a、b、k都为自然数 就是说,两个数的最大公约数,将其中一个数加到另一个数上,得到的新数组,其公约数不变,比如(4,6)=(4+6,6)=(4,6+2×4)=2。这里有一个比较简单的证明方法来说明这个性质:如果p是a和ka+b的公约数,p整除a,也能整除ka+b。那么就必定要整除b,所以p又是a和b的公约数,从而证明他们的最大公约数也是相等的。
2:(0,a)=a 由这两个性质得到的,就是更相减损术: (78,14)=(64,14)=(50,14)=(36,14)=(22,14)=(8,14)=(8,6)=(2,6)=(2,4)=(2,2)=(0,2)=2 基本上思路就是大数减去小数,一直减到能算出来为止。不过在平时的计算过程中,往往不必计算到最后一步,比如在上面的过程中,到了(8,6),就已经能够看出其结果。 我们可以看到,在上面的过程中,由 (78,14)到(8,14)完全可以一步到位,因为(78,14)=(14×5+8,14)=(8,14),由此就诞生出我们的辗转相除法。
最小公倍数等于,把这两个数用最大公约数除得到的商相乘,再乘以最大公约数,就得到最小公倍数;
#include <stdio.h>
int main()
{
int a,b,c,d,m,n;
scanf("%d %d",&a,&b);
m=a;n=b;
while(1){//循环的辗转相除法
c=a%b;
a=b;
b=c;
if(b==0){
break;
}
}
c=m/a;d=n/a;//最小公倍数
n=c*d*a; //的算法
printf("%d %d\n",a,n);//循环的辗转相除法的结果
return 0;
}