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