欧几里得算法
定理:gcd(a,b) = gcd(b,a mod b)
证明:a可以表示成a = kb + r,则r = a mod b
假设d是a,b的一个公约数,则有
d|a, d|b,而r = a - kb,因此d|r
因此d是(b,a mod b)的公约数
假设d 是(b,a mod b)的公约数,则
d | b , d |r ,但是a = kb +r
因此d也是(a,b)的公约数
因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证
#include<stdio.h>
//最小公倍数=两数的乘积/最大公约(因)数
int main(){
int m, n, r, temp, gcd, lcm;
printf("input two number(>0): ");
scanf("%d,%d",&m,&n);
while(m<=0||n<=0){
printf("\ninput right number: ");
scanf("%d,%d",&m,&n);
}
if(m<n)
{
temp = m;
m = n;
n = temp;
}
lcm = m * n;
r = m % n;
while(r != 0){
m = n;
n = r;
r = m % n;
}
gcd = n;
printf("\ngcd(m,n)=%d",gcd);
printf("\nlcm(m,n)=%d",lcm/gcd);
return 0;
}