欧几里得算法

欧几里得算法

两个整数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);

 

 

posted on 2012-05-23 21:09  即为将军  阅读(462)  评论(0)    收藏  举报

导航