若給定兩個正整數m和n,試寫出求他們的最大公因子(既能夠同來自時整除m和n的最大整數)的算法——歐幾里德算

輾轉相除法
開放分類:數學、最大公約數
輾轉相除法,又名歐幾里德守孫是術茶苦算法(Euclideanalgorithm)乃求兩個正整數之最大公因子的算法 。它是已知最古狀找老的算法,其可追溯至前300年 。它首次出現于歐幾里德的《幾何原本》(第VII卷,命題i和ii)中,而在中國則可以追溯至東漢出現的《九章算術》 。它并不需要把二數作質因子分解 。
證明:
設兩數為a、b(b<a),求建保絕余它們最大公約數(a、b)的步驟如下:用b除a,得a=bq?1+r?1(0≤r?1<b) 。若r?1=0,則(a,b)=b;若r?1360問答≠0,則再用r?1除b,得b=遠所茶亮酸源身r?1q?2+r?2(0≤r?2<r?1) 。若r?2=0,則(a,b)=r?1,若r?2≠0,則繼續用細嚴r?2除r?1,眼備……如此下去,直到能整除為止 。其最后一個非零余數即為(a,b) 。
[編輯]算法
輾轉相除法是利用以下性質來確定注兩個正整數a和b的最大公因子的:
1.若r是a÷b的余數,則
gcd(a,b)=gc體致穩她心父移d(b,r)
2.a和其倍數之藝呀粉最大公因子為a 。
另一種寫法是:
1.a÷b,令械小兩討益想清什r為所得余數(0≤r<b)
若r=0縣給半,算法結束;b即為答案 。
2.互換:置a←b,b←r,并返回第一步 。
[編輯]虛擬碼
這個算法可以用遞歸寫成如下:
functiongcd(a,b){
ifamodb<>0
ret巴完罪她給urngcd(b,amodb);
els千酒清蛋飯冷似般蛋誰e
【既能夠同來自時整除m和n的最大整數 若給定兩個正整數m和n,試寫出求他們的最大公因子的算法——歐幾里德算】returna;
}
或純使用循環:
functiongcd(a,b){
defineras擊故議日余征認百integer;
whileb≠0{
r:=amod學出滿英神被值b;
a:=b;
b:=r;
}
returna;
}
其中“amodb”是指取a÷b的余數 。
例如,123456和7890的最大公因子是6,這可由下列害半誰可向白步驟看出:
abamodb
12345678905106
789051062784
510627842322
27842322462
232246212
462126
1260
只要可計算余數都可用輾轉相除法來求最大公因子 。這包括多項式、復整數及所有歐幾里德定義域(Euclideandomain) 。
輾轉相除法的運算速度為O(n2),其中n為輸入數值的位數 。
猜你喜歡
- 蘋果跟哈密瓜能不能一起吃
- 蘋果港版充電器和國行有什么不同
- 在家也能夠做出來的美味燉肉的小竅門 快快來學吧
- 商品房買賣合同無效的幾種情形
- 什么樣的民間借貸合同無效
- 煮雞蛋也有大學問 不同的溫度不同的吃法
- 八年級上冊英語同步練習答案
- 不同建筑物的耐火等級介紹 建筑耐火等級如何劃分
- 欠款五年了還能夠訴訟嗎?
- 共同犯罪的客觀方面指的是哪些
