歐基里德算法又稱輾轉相除法,是計算兩個整數的最大公因數(Greatest Common Divisor, GCD)的方法。
有兩個數字 ,令 ,那麼一定存在兩個正整數 使得
那麼如果要求 ,我們可以不斷讓 互減,最後就會剩下
下圖是從維基百科上抓來的,兩線段分別表示 及 ,每個單位為其最大公因數
可以發現到,當我們重複將較大的一方扣除較小的一方,直到其中一方為 時,剩下的就會剛好是最大公因數
從這裡我們可以發現到,最大公因數實際上有這樣的性質:
不過實際上我們也不需要做那麼多次減法,因為我們總是會減到直到不能再減
附註: 為下高斯符號,也就是向下取整
舉例來說:
附註: 雖然沒有提到 的情況,不過在 時無論放在 的作法或是 的做法也都會是正確的
也就是說:
換個方法敘述
已知
已知
在實作上,可以透過 來簡寫
如果 的話,因為 會將兩者交換,因此下一次計算 時就會計算到 了
擴展歐基里德算法的命題如下:
已知 ,必定存在 使得貝祖定理成立
求 分別為何
根據命題可得
又因為
因此
整理式子後可以得到
因此
因此,由於 ,我們可以將原問題轉換成等價的新問題,並且新問題得出來的 可以幫助我們得到原問題的
如此一來就可以實作出擴展歐基里德算法囉!
補充: 在 的情況下我們知道 ,因此回傳
Crypto