- 上網查找什么是求兩個數的最大公約數的歐幾里得算法(輾轉相除法),提交算法說明和網上鏈接。
輾轉相除法又叫歐幾里得算法,是歐幾里得最先提出來的.輾轉相除法的實現,是基於下面的原理(在這里用(a,b)表示a和b的最大公因數):
(a,b)=(a,ka+b),其中a、b、k都為自然數.………………①
也就是說,兩個數的最大公約數,將其中一個數加到另一個數上,得到的新數,其公約數不變,比如(4,6)=(4+6,6)=(4,6+2×4)=2.要證明這個原理很容易:如果p是a和ka+b的公約數,p整除a,也能整除ka+b.那么就必定要整除b,所以p又是a和b的公約數,從而證明他們的最大公約數也是相等的.
基於上面的原理,就能實現我們的迭代相減法:
(78,14)=(64,14)=(50,14)=(36,14)=(22,14)=(8,14)=(8,6)=(2,6)=(2,4)=(2,2)=(0,2)=2
基本上思路就是大數減去小數,一直減到能算出來為止,在作為練習的時候,往往進行到某一步就已經可以看出得值.迭代相減法簡單,不過步數比較多,實際上我們可以看到,在上面的過程中,由(78,14)到(8,14)完全可以一步到位,因為(78,14)=(14×5+8,14)=(8,14),由此就誕生出我們的輾轉相除法.
用輾轉相除法求(a,b).設r0=b,r1=a,反復運用除法算式,得到一系列整數qi,ri和下面的方程:
相當於每一步都運用原理①把數字進行縮小,上面右邊就是每一步對應的縮小結果,可以看出,最后的余數rn就是a和b的公約數.迭代相減法和輾轉相除法在本質上是一樣的,相對來說,減法比較簡單(需要10步),但是除法步數少(僅需4步)
參考網址:https://blog.csdn.net/qq_41575507/article/details/90752742?
-
參考教材,用偽代碼(英語或漢語)實現歐幾里得算法(輾轉相除法),提交偽代碼。
num1 = int(input("請輸入第一個數字:"))
num2 = int(input("請輸入第一個數字:"))
m = max(num1, num2)
n = min(num1, num2)
r = m % n
while r != 0:
m = n
n = r
r = m % n
print(num1, "和", num2, "的最大公約數為", n) -
選擇幾組數據,手動走一下偽代碼,測試你寫的偽代碼是否正確,提交測試過程截圖。
選擇數組:200,100 30,7 64,1024 測試結果如圖



