輾轉相除法求兩個數的最大公約數:代碼如下:
#include<iostream.h>int gcd(int a,int b){ int temp; int remainder; //if necessary,exchange a and b if(a<b) { temp=a;a=b;b=temp; }remainder=a%b;while(remainder!=0){ a=b; b=remainder; remainder=a%b;}return b;}int main(){ int x,y; int fac; cout<<"Please enter two integers:"; cin>>x>>y; fac=gcd(x,y); cout<<"The greaterest common divisor of"; cout<<x<<"and"<<y<<"is:"<<fac<<endl;return 0;}
在數學中,輾轉相除法,又稱歐幾裡得演算法,是求最大公約數的演算法。輾轉相除法首次出現於歐幾裡得的《幾何原本》(第VII卷,命題i和ii)中,而在中國則可以追溯至東漢出現的《九章算術》。
兩個整數的最大公約數(亦稱公因子)是能夠同時整除它們的最大的正整數。輾轉相除法基於如下原理:兩個整數的最大公約數等於其中較小的數和兩數的差的最大公約數。例如,252和105的最大公約數是21(252
= 21 × 12;105 = 21 × 5);因為252 − 105 = 147,所以147和105的最大公約數也是21。在這個過程中,較大的數縮小了,所以繼續進行同樣的計算可以不斷縮小這兩個數直至其中一個變成零。這時,所剩下的還沒有變成零的數就是兩數的最大公約數。由輾轉相除法也可以推出,兩數的最大公約數可以用兩數的整數倍相加來表示,如21
= 5 × 105 + (−2) × 252。這個重要的等式叫做貝祖等式。
輾轉相除法最早出現在歐幾裡得的幾何原本中(大約公元前300年),所以它是現在仍在使用的演算法中最早出現的。這個演算法原先只用來處理自然數,但在19世紀,輾轉相除法被推廣至其他類型的數,如高斯整數和一元多項式。自此,現代抽象代數概念如歐幾裡得整環開始出現。後來,輾轉相除法又擴充至其他數學領域,如紐結理論和多元多項式。
輾轉相除法有很多應用,它甚至可以用來產生全世界不同文化中的傳統音樂節奏。[1]在現代密碼學方面,它是RSA演算法(一種在電子商務中廣泛使用的公開金鑰加密演算法)的重要部分。它還被用來解丟番圖方程,尋找滿足中國剩餘定理的數,或者求有限域的倒數。輾轉相除法還可以用來構造連分數,在施圖姆定理和一些整數分解演算法中也有應用。輾轉相除法是現代數論中的基本工具。
輾轉相除法處理大數時非常高效,它需要的步驟不會超過較小數的位元(十進位下)的五倍。加百利·拉梅(Gabriel
Lamé)於1844年證明了這點,開創了計算複雜性理論。
輾轉相除求兩個數的最大公約數: