算法:理解“擴展歐幾里得算法”


這個算法還是有點意思的,需要一些思考量和理解。

如何理解?

歐幾里得算法沒擴展之前,計算的兩個數的最大公約數,比如計算144和24的最大公約數,計算的過程如下:
最開始:144 24
第一次:24 144 % 24 即 24 0
發現直接整數了,說明24就是144的公約數,所以計算結果就是:24
如果用a,b來表示,變為一般形式的話:
給定兩個數(a, b),現在想計算兩者的最大公約數,那么可以那b來模a,如果結果為0,那說明b就是兩者的最大公約數,如果有余數,比如:
最開始:14 6
第一次:6 14 % 6 即6 2
第二次:2 6 % 2 即2 0
反過來看:2是2、6的最大公約數,而6不是6、14的最大公約數,但是K * 6 + 2能夠得到14,且6能被2整除,說明2是14的公約數。

擴展之后

如果將歐幾里得算法進行擴展,就是這樣,比如:
144 24,我們知道兩者的最大公約數是24,那么144x + 24y = 24,這個x、y分別是什么呢?顯然是x = 0,y = 1;但如果是14x + 6y = 2呢?通過上面求最大公約數的過程,我們能夠知道,最后一步的2x1 + 6y1 = 2是很容易的得到結果的,但是怎么樣從這個結果推回來,得到一開始的y呢?——這個就是擴展歐幾里得算法。

這樣來理解:
14x + 6y
6x2 + (14 % 6)y2
2x1 + (6 % 2)y1
一步一步往前推,14 % 6 == 2,說明y2 = x1,那么6x2 == (6 % 2)y1 == (6 - 6 / 2 * 2)y1(這里的是整除,用7 % 4來看,會更清晰,即等於7 - 7 / 4 * 4)
通過這樣的遞推,即從后往前推(或者用遞歸的思想,一直歸到最底,然后再計算回來)就能實現這一算法了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM