歐幾里得演算法,也稱為歐幾里得輾轉相除法,是用於查詢兩個數 和
的最大公約數的演算法。該演算法也可以為比整數
更一般的環定義。甚至存在不是歐幾里得環的主環,但可以在其中定義等效於歐幾里得演算法的演算法。有理數演算法在歐幾里得《幾何原本》的第七卷中給出。實數演算法出現在第十卷中,使其成為最早的整數關係演算法示例(Ferguson等人1999)。
歐幾里得演算法是一個P問題的例子,其時間複雜度受輸入值長度的二次函式限制(Bach 和 Shallit 1996)。
設 ,然後找到一個數
,它整除
和
(因此
和
),那麼
也整除
,因為
|
(1)
|
類似地,找到一個數 ,它整除
和
(因此
和
),那麼
也整除
,因為
|
(2)
|
因此, 和
的每個公約數也是
和
的公約數,因此該過程可以迭代如下
|
(3)
|
對於整數,當 恰好整除
時,演算法終止,此時
對應於
和
的最大公約數,
。對於實數,該演算法產生精確關係或近似關係的無限序列(Ferguson等人1999)。
歐幾里得演算法的一個重要結果是找到整數 和
,使得
|
(4)
|
這可以透過從 的方程開始,從前一個方程代入
,並向上遍歷方程來完成。
請注意, 只是餘數,因此可以透過手動重複計算以兩個感興趣的數字(較大的數字寫在前面)開始的連續項的餘數來輕鬆應用該演算法。例如,考慮將該演算法應用於
。這給出 42, 30, 12, 6, 0,因此
。類似地,將該演算法應用於 (144, 55) 得到 144, 55, 34, 21, 13, 8, 5, 3, 2, 1, 0,因此
,並且 144 和 55 是互質的。
一個簡潔的 Wolfram 語言 實現可以如下給出。
Remainder[a_, b_] := Mod[a, b]
Remainder[a_, 0] := 0
EuclideanAlgorithmGCD[a_, b_] := FixedPointList[
{Last[#], Remainder @@ #}&, {a, b}][[-3, 1]]
拉梅證明,對於小於 的兩個數,到達最大公約數所需的步數為
|
(5)
|
其中 是黃金比例。在數值上,拉梅的表示式評估為
|
(6)
|
對於 ,總是小於等於較小數的位數的
倍(Wells 1986,第 59 頁)。正如拉梅定理所示,最壞情況發生在將演算法應用於兩個連續的斐波那契數時。海爾布朗證明,對於所有對
,其中
,平均步數為
。克羅內克證明,演算法的最短應用使用最小絕對餘數。獲得的商的分佈如下表所示(Wagon 1991)。
| 商 | |
| 1 | 41.5 |
| 2 | 17.0 |
| 3 | 9.3 |
設 為使用歐幾里得演算法計算
所需的除法次數,並定義
如果
。那麼函式
由遞推關係給出
|
(7)
|
對於 ,製表此函式得到
|
(8)
|
(OEIS A051010)。給定 、2、3、... 的最大步數為 1、2、2、3、2、3、4、3、3、4、4、5、... (OEIS A034883)。
考慮函式
|
(9)
|
給出當 固定且
隨機選擇時的平均步數(Knuth 1998,第 344 頁和 353-357 頁)。
的前幾個值為 0, 1/2, 1, 1, 8/5, 7/6, 13/7, 7/4, ... (OEIS A051011 和 A051012)。Norton (1990) 表明
|
(10)
|
其中 是芒戈爾特函式,
是波特常數(Knuth 1998,第 355-356 頁)。
相關函式
|
(11)
|
其中 是尤拉總計函式,給出當
固定且
是與
互質的隨機數時的平均除法次數。Porter (1975) 表明
|
(12)
|
(Knuth 1998,第 354-355 頁)。
最後,定義
|
(13)
|
作為當 和
都在
中隨機選擇時的平均除法次數。Norton (1990) 證明
|
(14)
|
其中 是黎曼 zeta 函式的導數。
存在 21 個二次域,其中存在歐幾里得演算法(Inkeri 1947,Barnes 和 Swinnerton-Dyer 1952)。
有關更多詳細資訊,請參見 Uspensky 和 Heaslet (1939) 以及 Knuth (1998)。
儘管為推廣演算法以找到 個變數之間的整數關係做出了各種嘗試,但在Ferguson-Forcade 演算法被發現之前,沒有一個成功(Ferguson等人1999)。現在已經發現了其他幾種整數關係演算法。