欧几里得算法,也称为欧几里得辗转相除法,是用于查找两个数 和
的最大公约数的算法。该算法也可以为比整数
更一般的环定义。甚至存在不是欧几里得环的主环,但可以在其中定义等效于欧几里得算法的算法。有理数算法在欧几里得《几何原本》的第七卷中给出。实数算法出现在第十卷中,使其成为最早的整数关系算法示例(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)。现在已经发现了其他几种整数关系算法。