輾轉(zhuǎn)相除法,又名歐幾里得算法,是求最大公約數(shù)的算法。
原理及其詳細(xì)證明
設(shè)兩數(shù)為a、b(b<a),用gcd(a,b)表示a,b的最大公約數(shù),r=a mod b 為a除以b以后的余數(shù),輾轉(zhuǎn)相除法即是要證明gcd(a,b)=gcd(b,r)。
第一步:令c=gcd(a,b),則設(shè)a=mc,b=nc
第二步:根據(jù)前提可知r =a-kb=mc-knc=(m-kn)c
第三步:根據(jù)第二步結(jié)果可知c也是r的因數(shù)
第四步:可以斷定m-kn與n互素【否則,可設(shè)m-kn=xd,n=yd,(d>1),則m=kn+xd=kyd+xd=(ky+x)d,則a=mc=(ky+x)dc,b=nc=ycd,故a與b最大公約數(shù)成為cd,而非c】
從而可知gcd(b,r)=c,繼而gcd(a,b)=gcd(b,r)。
證畢。
用C表示則:
int gcd(int a,int b)
{
int temp;
if(a<b)/*交換兩個(gè)數(shù),使大數(shù)放在a上*/
{
temp=a;
a=b;
b=temp;
}
while(b!=0)/*利用輾除法,直到b為0為止*/
{
temp=a%b;
a=b;
b=temp;
}
return a;
}