什么是欧几里得算法?
欧几里得算法是求两个整数最大公约数的快速算法。
一、最大公约数The Greatest Common Divisor
如果整数A能被p整除,A就叫p的倍数,而p就是A的约数。例如25能被5整除,25是5的倍数,5就是25的约数。
几个整数共有的约数,叫做这几个整数的公约数。其中最大的公约数,叫做这几个数的最大公约数,简写成GCD---the Greatest Common Divisor。
例1:
整数25一共有3个约数,分别是1、5、25;
整数40一共有8个的约数分别是1、2、4、5、8、10、20、40;
25和40共有2个公约数,分别是1、5,最大公约数是5.
用纯数学语言给最大公约下定义:
如果两个整数A和B有n(n≥1)个公约数P1,P2,,,,Pn,而且P1<P2<....<Pn,则Pn是A和B的最大公约数,写成如下形式:
Pn=GCD(A,B)
二、欧几里得算法The Euclidean Algorithm
欧几里得算法是一种快速找到两个整数的最大公约数GCD的方法,也被称为“辗转相除法”。
欧几里得算法建立在如下4条规则基础之上:
如果A=0,则GCD(A,B)=B;
如果B=0,则GCD(A,B)=A;
如果A≠0,B≠0,则A=B∙Q+R,其中Q是B除A的商,R是余数。
例:
设:A=43,B=5
则:A=5x8+3,其中8是商Q,3是余数R
GCD(A,B)= GCD(B,R),即A和B的最大公约数等于B和R的最大公约数。
例:找出270和192的最大公约数GCD(270,192)
第一步:
A=270,B=192
270=192x1+78,即B=192,Q=1,R=78;
第二步:
因GCD(270,192)=GCD(192,78)
对GCD(192,78)重复第一步的演算:
A=192,B=78
192=78x2+36,即Q=2,R=36;
第三步:
因GCD(192,78)=GCD(78,36)
对GCD(78,36)重复第一步(或第二步)演算:
A=78, B=36
78=36x2+6,即Q=2,R=6
第四步:
因GCD(78,36)=GCD(36,6)
对GCD(36,6)重复第一步演算:
A=36,B=6
36=6x6+0,即Q=6,R=0
第五步:
因为:GCD(A,0)=0
所以:GCD(6,0)=6
结果:
因为:
GCD(270,192)=GCD(192,78)=GCD(78,36)=GCD(36,6)=GCD(6,0)
所以:
GCD(270,192)=6,即270和192的最大公约数是6。
三、欧几里得算法第4条规则的证明
欧几里得算法的第4条规则是A和B的最大公约数GCD(A,B),等于B和R的最大公约数 GCD(B,R),其中Q是B除A的商,R是余数,即A=B·Q+R。
为什么GCD(A,B)=GCD(B,R)?
为了证明这个等式,我们先来证明:
GCD(A,B)=GCD(A, A-B),其中A>B。
设:C=A-B,A、B、C是三个整数;
设:n是A和B的公约数;
C/n=(A-B)/n=A/n-B/n;A/n是整数,B/n也是整数,C/n也一定是整数。
所以:n也是C的约数;
因此:n是A、B、C这三个整数的公约数;
设:m是A的约数,但非B的约数;
C/m=(A-B)/m=A/m-B/m;A/m是整数,而B/m非整数,故C/m也一定是非整数;
所以:m一定不是C的约数;
同理,非A的约数,也一定不是C的约数;
因此,A和B的公约数一定是A、B、C的公约数;只有A和B的公约数才是A、B、C的公约数;A和C公约数;B和C的公约数。
因此得出结论:GCD(A,B)=GCD(A,C)
接下来证明:GCD(A,B)=GCD(B,R)
已知:GCD(A,B)=GCD(A,A-B)=GCB(A-B,B)=GCD(C,B)
同理:GCD(C,B)=GCD(C-B,B)=GCD(A-B-B,B)=GCD(A-2B,B)
不断重复上述操作,可以得到:
GCD(A,B)=GCD(C,B)=GCD(A-2B,B)=GCD(A-Q·B,B)
因为:A=Q·B+R,所以:A-Q·B=R
因此:GCD(A-Q·B,B)=GCD(R,B)=GCD(B,R)
结论:GCD(A,B)=GCD(B,R)
证明完毕!