用Python實現歐幾里得和廣義歐幾里得公式
阿新 • • 發佈:2019-01-03
題目:
- 用廣義歐幾里得除法求兩個整數的最大公因數。
- 用定理1.3.7求s和t使得:sa+tb = (a,b) 。
以上兩題要求對任意大整數給出結果。
這裡給出python的題解。
這個表是對定理的打表:
遞推式為:
因此用遞推可得。
因為前三行的下標為-1,-2,所以用個n替換
n和j遵循同樣的遞推式。
因此建議直接建立一個新的遞推表,下標直接沿用成n相關,驗證同等位置是否和原來遵循相同的規律就好。
不要讓原來有時候 j-1,有時候j+1, j和行數還完全不一樣干擾自己。
把錶轉換成計算機能夠直接讀懂的模式!
把*看成0輸入到列表。
Python的list類似於C++的vector,沒定義之前不能直接使用,沒插入值之前也不能直接下標呼叫
注意:Python的整除不是/ ,而是//
原始碼是:
def gcd(big, small):
while small:
r = big % small
big = small
small = r
return str(big)
def ex_gcd(a, b):
s = [0, 1, 0]
t = [0, 0, 1]
r = [a, b]
r.append(r[0] % r[1])
q = [0, 0, r[0] // r[1]]
n = 3
while 1:
q. append(r[n - 2] // r[n - 1])
r.append(r[n - 2] % r[n - 1])
s.append(s[n - 2] - (q[n - 1] * s[n - 1]))
t.append(t[n - 2] - (q[n - 1] * t[n - 1]))
if r[n] == 0:
break
n = n + 1
print("s= "+str(s[n])+" t= "+str(t[n]))
a = int(input("輸入第一個數a:"))
b = int(input("輸入第二個數b:"))
if a > b:
big = a
small = b
else:
big = b
small = a
print("a,b的最大公約數為:"+gcd(big, small))
ex_gcd(big, small)