欧几里得算法
欧几里得算法
两个整数a,b的最大公约数可以表示为gcd(a,b);
→还可以表示成s*a+t*b (s,t为整数)
→两个整数a,b的最小公倍数可以表示为lcm(a,b);
一:
令a=b*q+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)的公约数是一样的,其最大公约数也必然相等
则有gcd(a,b)=gcd(b,a mod b)
二:
用欧几里得求414和662的最大公约数
662=414*1+248
414=248*1+166
248=166*1+82
166=82*2+2
82=2*41
则gcd(414,662)=2,因为2是最后一个非零余数
程序:
x=a;
y=b;
while(y)
{
r=x%y;
x=y;
y=r;
}
gcd(a,b)=x;
三:
a*b=gcd(a,b)*lcm(a,b);
浙公网安备 33010602011771号