這個算法仍是有點意思的,須要一些思考量和理解。算法
歐幾里得算法沒擴展以前,計算的兩個數的最大公約數,好比計算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是二、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)
經過這樣的遞推,即從後往前推(或者用遞歸的思想,一直歸到最底,而後再計算回來)就能實現這一算法了。思考