擴(kuò)展歐幾里得算法

擴(kuò)展歐幾里得算法(Extended Euclidean algorithm)是歐幾里得算法(又叫輾轉(zhuǎn)相除法)的擴(kuò)展。已知整數(shù)a、b,擴(kuò)展歐幾里得算法可以在求得a、b的最大公約數(shù)的同時(shí),能找到整數(shù)x、y,使它們滿足貝祖等式
ax+by=gcd(a,b)

演算過程

求二元一次不定方程 47x+30y=1 的整數(shù)解。

47=30*1+17 // y=1, x=1
30=17*1+13 //    
17=13*1+4 // 同上
13=4*3+1 // 同上

然后把它們改寫成“余數(shù)等于”的形式

17=47*1+30*(-1)
13=30*1+17*(-1)
4=17*1+13*(-1)
1=13+4*(-3)

然后把它們“倒回去”

1=13+4*(-3)
1=13+[17*1+13*(-1)]*(-3)
1=17*(-3)+13*4
1= 17*(-3)+[30*1+17*(-1)]*4
1=30*4+17*(-7)
1=30*4+[47*1+30*(-1)]*(-7)
1=47*(-7)+30*11

求得 x=-7,y=11。

python

def ext_euclid(a, b):
     if b == 0:
         return 1, 0, a
     else:
         x, y, q = ext_euclid(b, a % b) # q = gcd(a, b) = gcd(b, a%b)
         x, y = y, (x - (a // b) * y)
         return x, y, q

參考:

https://en.wikipedia.org/wiki/Extended_Euclidean_algorithm

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容