在數學中，輾轉相除法，又稱歐幾里得演算法，是求最大公約數的演算法。輾轉相除法首次出現於歐幾里得的《幾何原本》（第 VII 卷，命題 i 和 ii）中，而在中國則可以追溯至東漢出現的《九章算術》。 兩個整數的最大公約數是能夠同時整除它們的最大的正整數。輾轉相除法基於如下原理：兩個整數的最大公約數等於其中較小的數和兩數相除餘數的最大公約數。例如，欲求 252 和 105 的最大公約數（25221times1210521times5）；因為 252div105242，所以這個最大公約數也是 42 與 105 的最大公約數 4221times2。在這個過程中，較大的數縮小了，所以繼續進行同樣的計算可以不斷縮小這兩個數直至餘數為零。這時，所剩下的還沒有變成零的數就是兩數的最大公約數。由輾轉相除法也可以推出，兩數的最大公約數可以用兩數的整數倍相加來表示，如 215times 1052 times 252。這個重要的結論叫做貝祖定理。 輾轉相除法最早出現在歐幾里得的《幾何原本》中（大約公元前 300 年），所以它是現行的演算法中歷史最悠久的。這個演算法原先只用來處理自然數和幾何長度（相當於正實數），但在 19 世紀，輾轉相除法被推廣至其他型別的數學物件，如高斯整數和一元多項式。由此，引申出歐幾里得整環等等的一些現代抽象代數概念。後來，輾轉相除法又擴充套件至其他數學領域，如紐結理論和多元多項式。 輾轉相除法有很多應用，它甚至可以用來生成全世界不同文化中的傳統音樂節奏。Godfried Toussaint The Euclidean algorithm generates traditional musical rhythms Proceedings of BRIDGES Mathematical Connections in Art Music and Science Banff Alberta Canada July 31 to August 3 2005 pp 4756 在現代密碼學方面，它是 RSA 演算法（一種在電子商務中廣泛使用的公鑰加密演算法）的重要部分。它還被用來解丟番圖方程，比如尋找滿足中國剩餘定理的數，或者求有限域中元素的逆。輾轉相除法還可以用來構造連分數，在施圖姆定理和一些整數分解演算法中也有應用。輾轉相除法是現代數論中的基本工具。 輾轉相除法處理大數時非常高效，如果用除法而不是減法實現，它需要的步驟不會超過較小數的位數（十進位制下）的五倍。拉梅於 1844 年證明了這點，同時這也標誌著計算複雜性理論的開端。 背景 最大公約數 歐幾里得的輾轉相除法計算的是兩個自然數 a 和 b 的最大公約數 g，意思是能夠同時整除 a 和 b 的自然數中最大的一個。兩個數的最大公約數通常寫成 gcd a b，或者簡寫成 ab Stark p 16，但是第二種寫法也被使用在其他數學概念，如二維向量的座標。 如果 gcd ab1，則稱 a 和 b 互素。Stark p 21a 和 b 是否互素和它們是否素數無關。LeVeque p 32 如，6 和 35 都不是素數，因為它們都可以分解為多於一個素因數的乘積：6 2 3，35 5 7。但是，6 和 35 互素，因為除了 1 以外沒有自然數同時整除 6 和 35。 令 ggcd a b。由於 a 和 b 都是 g 的整數倍，所以可以寫成 a mgb ng，並且不存在更大的整數 Gg 使等式成立。為了使 g 儘可能大，就要使 a 和 b 中所有公約數都提取出來歸入 g 中，所以自然數 m 和 n 一定互素，並且 a 和 b 的最大公約數 g 可以被 a 和 b 的所有其他公因數 c 整除。Leveque p 31 我們可以用右圖來解釋最大公約數的概念：設一個長方形的邊長為 a 和 b。因為 a 和 b 的任何公約數 c 都可以整除 a 和 b，所以長方形的邊都可以等分為長度為 c 的線段，也就是長方形可以被邊長為 c 的正方形正好填滿。而最大公約數 g 是所有可能的 c 中最大的一個。例如，一個 24 60 的長方形區域可以分成 1 1、2 2、3 3、6 6 或 12 12 的正方形網格。也就是說，12 是 24 和 60 的最大公約數。 a 和 b 的最大公約數是兩數共有的素因數的乘積。Schroeder pp 2122 例如，462 可以分解成 2 3 7 11；1071 可以分解成 3 3 7 17。462 和 1071 的最大公約數等於它們共有的素因數的乘積 3 7 21。如果兩數沒有公共的素因數，那麼它們的最大公約數是 1，也即這兩個數互素。輾轉相除法的優點就在於它能以有系統的方式求出兩數的最大公約數，而無需分別對它們作因式分解。Schroeder p 19 大數的素因數分解被認為是一個困難的問題，即使是現代的計算機也非常難於處理，所以許多加密系統的原理都是建基於此。Schroeder pp 216219 在數學中，尤其是抽象代數的環論中，最大公約數有一個更加巧妙的定義：a 和 b 的最大公約數 g 是 a 和 b 的線性和中的最小正整數，即所有形如 uavb（其中 u 和 v 是整數）的數中的最小正整數。可以證明，所有 uavb 都是 g 的整數倍（uavbmg，其中 m 是整數）。用現代數學語言來說，a 和 b 生成的理想即是由 g 生成的主理想。最大公約數的這個定義和其他定義的等價性將在下面描述。 三個數的最大公約數的定義和兩個數的相同，即是它們共有的素因數的積 Stark p 25，它們或者也可以按下式計算 Ore pp 4748： gcd a b c gcd a gcd b c gcd gcd a b c gcd gcd a c b 所以，歐幾里得的輾轉相除法實際可以計算任意多整數的最大公約數。 歸納、遞迴和無窮遞降 下文的論證會用到三種相關的數學方法，分別是數學歸納法、遞迴和無窮遞降。數學歸納法 Section 121 Mathematical Induction pp 1121 經常用來證明某個定理對所有自然數成立：Rosen pp 1821 首先證明定理對一個特定的數 n_0 成立（通常是 1）；然後證明如果定理對自然數 n 成立的話，那麼它對自然數 n1 成立。這樣，便可證明定理對所有大於 n_0 的自然數也成立。遞迴 Rosen pp 2124 是將相關的陣列成一個數列（a_1a_2a_3cdots），當中除初始項外，其中每一項都用前一項或前幾項表示。如斐波那契數列就是遞迴的，每一項 F_n 都等於 F_n1F_n2（ngeqq 2）。輾轉相除法中的一些等式也是遞迴的。最後，無窮遞降 Rosen p 492 是用方程的一個自然數解匯出比它小的自然數解。但是，這種轉化不能永遠進行下去，因為只有有限個小於原來的自然數解的自然數。所以，要麼方程無解，不然在有限步內必然能得出最小的自然數解。在下文會用到此法來證明輾轉相除法一定會在有限步內結束。 演算法描述 計算過程 輾轉相除法是一種遞迴演算法，每一步計算的輸出值就是下一步計算時的輸入值。Stark pp 1620 設 k 表示步驟數（從 0 開始計數），演算法的計算過程如下。 每一步的輸入是都是前兩次計算的非負餘數 r_k1 和 r_k2。因為每一步計算出的餘數都在不斷減小，所以，r_k1 小於 r_k2。在第 k 步中，演算法計算出滿足以下等式的商 q_k 和餘數 r_k： r_k2q_k r_k1r_k 其中 0leq r_kr_k1。也就是 r_k2 要不斷減去 r_k1 直到比 r_k1 小。 為求簡明，以下只說明如何求兩個非負整數 a 和 b 的最大公約數（負數的情況是簡單的）。在第一步計算時（k0），設 r_2 和 r_1 分別等於 a 和 b，第 2 步（此時 k1）時計算 r_1（即 b）和 r_0（第一步計算產生的餘數）相除產生的商和餘數，以此類推。整個演算法可以用如下等式表示： aq_0 br_0 bq_1 r_0r_1 r_0q_2 r_1r_2 r_1q_3 r_2r_3 如果有 a，演算法的第一步實際上會把兩個數字交換，因為這時 a 除以 b 所得的商 q_0 會等於 0，餘數 r_0 則等於 a。然後，演算法的第二步便是把 b 除以 a，再計算所得之商和餘數。所以，對於 kgeq 0 總有 r_kr_k1，即運算的每一步中得出的餘數一定小於上一步計算的餘數。 由於每一步的餘數都在減小並且不為負數，必然存在第 n 步時 r_n 等於 0，使演算法終止 Stark p 18，r_n1 就是 a 和 b 的最大公約數。其中 n 不可能無窮大，因為在 r_0 和 0 之間只有有限個自然數。 正確性的證明 輾轉相除法的正確性可以分成兩步來證明。在第一步，我們會證明演算法的最終結果 r_n1 同時整除 a 和 b。因為它是一個公約數，所以必然小於或者等於最大公約數 g。在第二步，我們證明 g 能整除 r_n1。所以 g 一定小於或等於 r_n1。兩個不等式只在 r_n1g 時同時成立。 具體證明如下： 證明 r_n1 同時整除 a 和 b： 因為餘數 r_n 是 0，r_n1 能夠整除 r_n2： r_n2q_n r_n1r_n 因為 r_n1 能夠整除 r_n2，所以也能夠整除 r_n3： r_n3q_n1 r_n2r_n1 同理可證 r_n1 可以整除所有之前步驟的餘數，包括 a 和 b，即 r_n1 是 a 和 b 的公約數，r_n1leq g。 證明最大公約數 g 能整除 r_n1： 根據定義，a 和 b 可以寫成 g 的倍數：amg、bng，其中 m 和 n 是自然數。 因為 r_0aq_0 bmgq_0 ngmq_0 n g，所以 g 整除 r_0。 同理可證 g 整除每個餘數 r_1r_2ldots r_n1。 因為最大公約數 g 整除 r_n1，因而 gleq r_n1。 所以 g r_n1。即：高德納，p 320 ggcd a bgcd b r_0gcd r_0 r_1ldotsgcd r_n2 r_n1r_n1 舉例 例如，計算 a1071 和 b462 的最大公約數的過程如下：從 1071 中不斷減去 462 直到小於 462（可以減 2 次，即商 q_02），餘數是 147： 1071 2 times 462 147 然後從 462 中不斷減去 147 直到小於 147（可以減 3 次，即 q_13），餘數是 21： 462 3 times 147 21 再從 147 中不斷減去 21 直到小於 21（可以減 7 次，即 q_27），沒有餘數： 147 7 times 21 0 此時，餘數是 0，所以 1071 和 462 的最大公約數是 21，這和用素因數分解得出的結果相同（見上文）用表格表示如下： 步驟數 算式 商和餘數 0 1071 462 q_0 r_0 q_02、r_0147 1 462 147 q_1 r_1 q_1 3、r_1 21 2 147 21 q_2 r_2 q_2 7、r_2 0（演算法終止） 圖形演示 輾轉相除法的計算過程可以用圖形演示。假設我們要在 atimes b 的矩形地面上鋪正方形瓷磚，並且正好鋪滿，其中 a 大於 b。我們先嚐試用 btimes b 的瓷磚，但是留下了 r_0times b 的部分，其中 r_0。我們接著嘗試用 r_0times r_0 的正方形瓷磚鋪，又留下了 r_1times r_0 的部分，然後再使用 r_1times r_1 的正方形鋪 直到全部鋪滿為止，即到某步時正方形剛好覆蓋剩餘的面積為止。此時用到的最小的正方形的邊長就是原來矩形的兩條邊長的最大公約數。在圖中，最小的正方形面積是 2121，而原先的矩形邊長是 1071462，所以 21 是 1071 和 462 的最大公約數。 計算商和餘數 在每個步驟 k 中，輾轉相除法都需要計算兩個數 r_k1 和 r_k2 的商 q_k 和餘數 r_k： r_k2q_k r_k1r_k 其中 0leq r_k r_k1。除法的演算法保證這樣的商和餘數總是存在。自然數的除法演算法還指出這樣的商和餘數是惟一的，但這對輾轉相除法而言並非必要。Cohn pp 104110 在歐幾里得最初的描述中，商和餘數是透過連續的減法來計算的，即從 r_k2 中不斷減去 r_k1 直到小於 r_k1。一個更高效的做法是使用整數除法和模除來計算商和餘數： r_k equiv r_k2 bmod r_k1 計算機實現 輾轉相除法可用偽程式碼表示，比如除法版本可以寫成高德納，pp 319320 function gcd a b while b 0 t b b a mod b a t return a C 版本： int gcd int m int n int t 1 while t 0 t m n m n n t return m Rust 版本： fn gcd x isize y isize Optionisize match xy 0 0 None a 0 Some aabs mut a mut b while b 0 let t b b a b a t Some aabs Python 3 版本： def gcd a b while b 0 t a b a b b t return a 在第 k 次迴圈開始時，變數 b 的值是前一次運算的餘數 r_k1，變數 a 的值是再前一次運算的餘數 r_k2。步驟 ba bmod b 的作用等同於遞迴式 r_k equiv r_k2 bmod r_k1。變數 t 的功能是在下一個餘數 r_k 計算過程中臨時性地儲存 r_k1 的值。在一次迴圈結束時，變數 b 的值是前一次運算的餘數 r_k，變數 a 的值是再前一次運算的餘數 r_k1。 在歐幾里得定義的減法版本，取餘運算被減法替換。高德納，pp 318319 function gcd a b if a 0 return b while b 0 if a b a a b else b b a return a 變數 a 和 b 的值分別是前兩次的餘數 r_k1 和 r_k2。假定第 k 次迴圈開始時 a 大於 b，那麼 a 等於 r_k2，因為 r_k2 r_k1。在迴圈過程中，a 重複減去 b 直到比 b 小，此時 a 就是下一個餘數 r_k；然後 b 重複減去 a 直到比 a 小，此時 b 就是下一個餘數 r_k1；重複執行直到 b0。 以下是遞迴版本 Stillwell p 14： function gcd a b if b 0 return a else return gcd b a mod b C 遞迴版本如下： int gcd int nint m return m 0 n gcd m n m Rust 遞迴版本： fn gcd x isize y isize Optionisize match xy 0 0 None a 0 Some aabs _ gcd y x y Java 版本： public class MethodOfSuccessiveDivision public static void main String args Systemoutprintln gcd 1071 462 public static int gcd int a int bif b 0return a else return gcd b a b Python 3 版本： def gcd a b return a if b 0 else gcd b a b 例如 gcd 1071462 的計算過程是：函式的第一次呼叫計算 gcd 4621071 bmod 462 gcd 462147；下一次呼叫計算 gcd 147462 bmod 147gcd 14721，在接下來是 gcd 21147bmod 21gcd 21021。 使用絕對值最小的餘數 在另一個版本的演算法中，每一步還要把取餘運算時計算出的商增加一後再重新計算餘數（此時計算出的餘數應該是負的），然後取兩個餘數的絕對值較小的數作為下一步運算時使用的餘數。Ore p 43 取餘運算後，設 r_k 是計算出的餘數（此時為正），q 是計算出的商： r_k2q_k r_k1r_k 即假設 r_k1r_k0。然後使用以下式子計算出一個負的餘數 e_k： r_k2q_k 1 r_k1e_k 如果 e_kr_k，那麼用 e_k 替換 r_k 進行下一次運算。如利奧波德克羅內克所指出的，這個版本需要的運算步驟是歐幾里得演算法的所有版本中最少的。 歷史發展 輾轉相除法是目前仍然在使用的歷史最悠久的演算法之一。高德納，p 318 它首次出現於《幾何原本》（卷 7 命題 12、卷 10 命題 23）（大約公元前 300 年）。在卷 7 中用於整數，在卷 10 中用於線段的長度（以現代的觀點看，線段的長度可視為正實數，也就是說輾轉相除法實際可用於實數上，但是當時未有實數的概念）。卷 10 中出現的演算法是幾何的，兩段線段 a 和 b 的最大公約數是 a 和 b 的公度中的最大值。 這個演算法可能並非歐幾里得發明，因為他也有將先前其他數學家的一些成果編進他的《幾何原本》。數學家、歷史學家範德瓦爾登認為卷 7 的內容可能來自畢達哥拉斯學院出身的數學家寫的關於數論的教科書。輾轉相除法在當時很可能已為尤得塞斯（大約公元前 375 年）所知 ，甚至可能更早之前就已經存在，因為歐幾里得和亞里士多德的著作中都出現了一詞（意為 輾轉相減）。 幾個世紀之後，輾轉相除法又分別被中國人和印度人獨立發現，Stillwell p 31 主要用來解天文學中用到的丟番圖方程以及制定準確的歷法。5 世紀末，印度數學家、天文學家阿里亞哈塔曾稱輾轉相除法為 粉碎機，這可能是因為它在解丟番圖方程時很有效 Rosen pp 8687。Tattersall p 70 在中國，《九章算術》中提到了一種類似輾轉相減法的 更相減損術。《孫子算經》中則出現了中國剩餘定理的一個特例 Ore pp 247248，但是直到 1247 年秦九韶才於其《數學九章》中解答了該定理的一般情況，當中用到了他發明的大衍求一術。此法的其中一部分實際上便是輾轉相除的原理，秦九韶在書中對此有明確表述。在歐洲，輾轉相除法首次出現於的著作《愉悅討喜的問題》的第二版在歐洲，輾轉相除法被用於丟番圖方程和構建連分數。後來，英國數學家在其著作中收編了擴充套件歐幾里得演算法，作為一個有效計算連分數的方法。他將此法的來源歸名於。Tattersall pp 7276 19 世紀，輾轉相除法促成了新數系的建立，如高斯整數和艾森斯坦整數。1815 年，高斯用輾轉相除法證明高斯整數的分解是惟一的，儘管他的研究到了 1832 年才首度發表。高斯在他的《算數研究》（出版於 1801 年）中實際上也有援引這個演算法，但僅是以連分數方法的形式敘述。約翰狄利克雷是第一個將輾轉相除法作為數論的基礎的數學家。狄利克雷提出，數論中的很多結論，如分解的惟一性，在任何使輾轉相除法適用的數系中均有效。狄利克雷，pp 2931 狄利克雷的數論講義後來經理查德戴德金編輯和推廣，戴德金也有以輾轉相除法來研究代數整數。比如，他是第一個用高斯整數的分解惟一性證明費馬平方和定理的數學家。戴德金還率先定義了歐幾里得整環的概念。19 世紀末，戴德金所定義的理想概念使得數論的重心不必建基於輾轉相除法，從而促進了理論的發展。 歐幾里得演算法是所有演算法的鼻祖，因為它是現存最古老的非凡演算法。 高德納，《計算機程式設計藝術，第二卷：半數值演算法》，第二版 1981 p 318 輾轉相除法的其他應用發展於 19 世紀。1829 年，施圖姆將輾轉相除法用於施圖姆序列（用於確定多項式的不同實根的個數的方法）。 輾轉相除法是歷史上第一個，即尋找兩個可通約實數的整數關係的演算法。近年來，出現了一些新穎的整數關係演算法，如和福爾卡德於 1979 年發表的弗格森 福爾卡德演算法（FergusonForcade algorithm） 、以及與它相關的、HJLS 演算法以及 PSLQ 演算法。 1969 年，科爾（Cole）和戴維（Davie）基於輾轉相除法創造了一種二人遊戲，叫做「歐幾里得遊戲」。這個遊戲有最優策略。遊戲開始於兩列分別為 a 和 b 個棋子組成的序列，玩家輪流從較長一列中取走較短一列棋子數量的 m 倍的棋子。如果兩列棋子 p 和 q 分別由 x 和 y 個棋子組成，其中 x 大於 y，那麼玩家可以將序列 p 的棋子數量減少為自然數 x my。最後率先將一列棋子清空的玩家勝出。Rosen p 95 數學上的應用 貝祖等式 貝祖等式說明，兩個數 a 和 b 的最大公約數 g 可以表示為 a 和 b 的線性和。也就是說，存在整數 s 和 t 使 gsatb。Rosen p 81Cohn p 104 整數 s 和 t 可以從輾轉相除法算出的商 q_0q_1cdots 計算出。Rosen p 91 從輾轉相除法的最後一步開始，g 可以表示成前一步的商 q_N1 和前兩步的餘數 r_N2 和 r_N3： gr_N1r_N3q_N1 r_N2 而前兩步的餘數又分別可以表示成它們前兩步的餘數和商： r_N2r_N4q_N2 r_N3 r_N3r_N5q_N3 r_N4 將這兩行式子先後代入第一個式子，可以將 g 表示成 r_N4 和 r_N5 的線性和。重複進行迭代直到出現 a 和 b： r_2r_0q_2 r_1 r_1bq_1 r_0 r_0aq_0 b 最終，g 可以表示成 a 和 b 的線性和：gsatb。貝祖等式以及以上證明都可以擴充套件至歐幾里得整環。 主理想和相關問題 貝祖等式提供了另一種定義 a 和 b 的最大公約數 g 的方法。Leveque p 33 考慮形如 uavb（其中 u 和 v 是整數）的數的集合。因為 a 和 b 都可以被 g 整除，所以這個集合中的所有元素都可以被 g 整除。也就是說這個集合中的數都可以表示成 g 的倍數，或者 a 和 b 的其他公約數的倍數。但是，只有最大公約數才是這個集合的元素。根據貝祖等式，有 gsatb。換言之，當 us、vt 時得出 g。任何其他的公約數都不是這個集合的元素，因為它們都不能被比它們大的 g 整除。相反地，g 的任何倍數都屬於這個集合，只要令 ums、vmt，便有： mgmsamtb 所以，形如 uavb 的數的集合等於 g 的整數倍的集合。也就是說，任意兩個數的線性和的集合等同於它們最大公約數的整數倍的集合。a 和 b 的最大公約數叫做 a 和 b 的理想的生成元素。這個最大公約數的定義匯出了兩個現代抽象代數的概念：主理想（由單個元素生成的理想）以及主理想整環（其每一理想都是主理想的整環）。 這個結果可以解決某些實際問題。Schroeder p 23 例如，考慮兩個容積分別為 a 和 b 的量杯，其中 a 和 b 為正整數。透過加入或倒去 u 倍第一個量杯的體積以及 v 倍第二個量杯的體積的液體，任何體積為 uavb 的液體都可以被量出（只要 uavb 為正數）。根據貝祖等式，凡是可以被量出的液體，其體積一定是 a 和 b 的最大公約數 g 的倍數。 擴充套件歐幾里得演算法 貝祖等式的整數 s 和 t 可以透過擴充套件歐幾里得演算法算出。這個擴充套件演算法在原有輾轉相除法的基礎上增加了兩個遞迴等式：Rosen pp 9093 s_ks_k2q_k s_k1 t_kt_k2q_k t_k1 演算法開始時： s_21 t_20 s_10 t_11 加上這兩個遞迴式後，當演算法終止於 r_N0，貝祖等式的整數 s 和 t 分別由 s_N 和 t_N 給出。 這個演算法的正確性可以用數學歸納法來證明。假設遞迴至第 k1 步是正確的，也就是假設： r_js_j at_j b 在 j 小於 k 時皆成立。則第 k 步運算得出以下等式： r_kr_k2q_k r_k1 因為 r_k2 和 r_k1 被假定是正確的，所以可以用 s 和 t 表示： r_ks_k2 at_k2 bq_k s_k1 at_k1 b 整理後得到第 k 步的結果，和我們期望得到的結果一致： r_ks_k at_k bs_k2q_k s_k1 at_k2q_k t_k1 b 矩陣法 整數 s 和 t 也可以用矩陣運算得出。輾轉相除法的計算過程： aq_0 br_0 bq_1 r_0 r_1 r_N2q_N r_N10 可以寫作 22 的商矩陣乘以一個 2 維餘數向量： begin pmatrix a b end pmatrix begin pmatrix q_0 1 1 0 end pmatrix begin pmatrix b r_0 end pmatrix begin pmatrix q_0 1 1 0 end pmatrix begin pmatrix q_1 1 1 0 end pmatrix begin pmatrix r_0 r_1 end pmatrix cdots prod_i0N begin pmatrix q_i 1 1 0 end pmatrix begin pmatrix r_N1 0 end pmatrix 令 mathbf M 表示所有商矩陣的乘積： mathbf M begin pmatrix m_11 m_12 m_21 m_22 end pmatrix prod_i0N begin pmatrix q_i 1 1 0 end pmatrix begin pmatrix q_0 1 1 0 end pmatrix begin pmatrix q_1 1 1 0 end pmatrix cdots begin pmatrix q_N 1 1 0 end pmatrix 這使輾轉相除法化簡為： begin pmatrix a b end pmatrix mathbf M begin pmatrix r_N1 0 end pmatrix mathbf M begin pmatrix g 0 end pmatrix 如要用 a 和 b 的線性和表示 g，可將等式兩邊同時乘以矩陣 mathbf M 的逆矩陣。mathbf M 的行列式等於 1N1，因為它等於商矩陣的行列式的乘積，而每一個的行列式都是1。因為 mathbf M 的行列式不為零，最終的餘數向量可以利用 mathbf M 的逆矩陣解出： begin pmatrix g 0 end pmatrix mathbf M1 begin pmatrix a b end pmatrix 1N1 begin pmatrix m_22 m_12 m_21 m_11 end pmatrix begin pmatrix a b end pmatrix 由上式可以得出 g1N1m_22 am_12 b。 貝祖等式中的兩個整數分別是 s1N1 m_22、t1N m_12。矩陣法的效率可前文描述的輾轉相除法的遞迴演算法是相同的，每一步都有兩次乘法和兩次加法。 歐幾里得引理和唯一分解 貝祖等式對輾轉相除法的很多應用都很重要，如證明自然數的唯一分解性質 Stark pp 2636 假設數字 L 可以寫成兩個因數 u 和 v 的乘積，即 Luv。如果另一個數 w 與 u 互素的數也能整除 L，那麼 w 必須整除 v，證明如下：如果 u 和 w 的最大公約數是 1，則根據貝祖等式存在 s 和 t 使 1sutw。 兩邊都乘以 v： vsuvtwvsLtwv 因為 w 整除等式右邊，所以也應整除等式左邊的 v。這個結果叫做歐幾里得引理。Ore p 44 如果一個素數整除 L 那麼它至少整除 L 的一個因數。如果一個數 w 互素於數列 a_1a_2ldotsa_n 中的每一個數，則 w 也一定互素於它們的乘積 a_1times a_2times ldotstimes a_n。 歐幾里得引理足以證明每一個自然數的素數分解是惟一的。Stark pp 281292 我們用反證法來證明，假設 L 可以分別分解成 m 個素數和 n 個素數，即： Lp_1p_2cdots p_m q_1q_2cdots q_n 根據假設，每個素數 p 都能整除 L，因此它必須能夠整除某個 q；因為 q 也是一個素數，所以 pq。同理，對於每一個 p 都存在一個 q 與它相等。所以兩種分解除了順序不同以外是完全相同的。整數分解的惟一性在數學證明中有很多應用，下文將會提到。 線性丟番圖方程 丟番圖方程是以亞歷山大數學家丟番圖的名字命名的一類方程，它的解被限制在整數範圍。Rosen pp 119125 關於整數 x 和 y 的線性丟番圖方程形如：Schroeder pp 106107 ax by c 其中 a、b、c 是已知整數。這個方程可以寫成關於 x 的同餘式： ax equiv c pmod b 令 g 為 a 和 b 的最大公約數，a、b 都能被 g 整除，故 axby 能夠被 g 整除。所以，c 一定能夠被 g 整除，不然方程就無解。方程兩邊若同時除以 frac cg，方程就變成了貝祖等式： sa tb g 其中 s 和 t 可以用擴充套件歐幾里得演算法求解。Schroeder pp 108109 所以這個丟番圖方程的一個解即是： begin align x_1 s frac cg y_1 t frac cg end align 總體而言，丟番圖方程如果有解，就一定有無數個解。Rosen pp 120121 只需要考慮兩個解 x_1y_1 和 x_2y_2： ax_1 by_1 c ax_2 by_2 或者可以寫成： a x_1 x_2 b y_2 y_1 所以相鄰兩個解的 x 之間的差是 frac bg，y 之間的差是 frac ag。這樣，所有的解都可以表示成： begin align x x_1 frac btg y y_1 frac atg end align 當 t 取遍所有整數時，方程所有的解都可以從 x_1y_1 計算出來。如果限制為正整數解 x0 y0 的話，那麼解的數量就可能是有限的。有時候，這種對解的限制使丟番圖方程在未知數個數比方程數更多的情況下仍然能有唯一解 Stark p 47，而在允許實數解的線性方程組中，這種情況是不可能的。 乘法逆和 RSA 演算法 有限域是一個支援四種運算的數集。這四種運算也通稱為加法、減法、乘法、除法，跟一般的四則運算有相同的性質，如交換律、結合律和分配律。舉例來說，使用同餘可以讓 13 個數字的集合 012cdots12 構成一個有限域。在這個域中，任何數學運算（加減乘除）都歸約成 13 的模，例如 5times 7 35 bmod 13 9 。對於任意素數 p ，都可以定義這種有限域；使用更復雜的方法，也可以對素數 p 的 m 次方定義這樣的有限域。有限域也叫做伽羅瓦域，其縮寫為 mathrm GFP 或 mathrm GFPm 。 在這樣一個有 m 個數的域中，任何非零元素 a 都存在惟一乘法逆 a1 使 aa1a1 aequiv 1 bmod m 。這可以透過解同餘式 ax equiv 1 bmod m 得出，Schroeder pp 107109 或者也可以解與之等價的丟番圖方程 Stillwell pp 186187 axmy1 這個方程可用擴充套件歐幾里得演算法解出（參見上文）。在 RSA 演算法中，尋找乘法逆是非常重要的一步，它決定了使用哪個數來解密資訊。Schroeder p 134 雖然 RSA 演算法不使用域而是使用環，擴充套件歐幾里得演算法仍然可以用來求乘法逆。歐幾里得演算法也被應用於糾錯碼，例如，它可以代替伯利坎普－梅西演算法解基於有限域的 BCH 碼和裡德 所羅門碼。Error correction coding mathematical methods and algorithms page 266 Todd K Moon John Wiley and Sons 2005 ISBN 9780471648000 中國剩餘定理 輾轉相除法也可以用來解線性丟番圖方程組。Rosen pp 143170 如在中國剩餘定理中，整數可以表示成被 N 個互素的數 m_i 除留下的餘數：Schroeder pp 194195 begin align x_1 equiv x pmod m_1 x_2 equiv x pmod m_2 vdots x_N equiv x pmod m_N end align 為了從 x 的 N 個餘數 x_i 中確定 x 的值，我們將這些式子組合成單個線性丟番圖方程，其中模數 M 是所有模數 m_i 的乘積，然後定義 M_i 如下： M_i frac Mm_i 也就是， M_i 是除了 m_i 以外所有模數的乘積。接著是關鍵的一步，尋找 N 個數 h_i 使： M_i h_i equiv 1 pmod m_i 有了這些數 h_i 之後，整數 x 可以用下式從餘數 x_i 中解出： x equiv x_1 M_1 h_1 x_2 M_2 h_2 cdots x_N M_N h_N mod M 因為 h_i 是 M_i 的乘法逆，所以可以使用擴充套件歐幾里得演算法求出（見上一節）。 連分數 輾轉相除法和連分數有著緊密的關係。計算連分數的過程如下： begin align frac ab q_0 frac r_0b frac br_0 q_1 frac r_1r_0 frac r_0r_1 q_2 frac r_2r_1 vdots frac r_k2r_k1 q_k frac r_kr_k1 vdots frac r_N2r_N1 q_N end align 其中每個式子的右邊最後一項都等於下一個式子的左邊項的倒數。所以前兩個式子可以組合成： frac ab q_0 frac 1q_1 frac r_1r_0 第三個式子可以代入分母中的 frac r_1r_0 ： frac ab q_0 frac 1q_1 frac 1q_2 frac r_2r_1 每一步中，最後一項 frac r_kr_k1 都可以用下一個式子代換，直至最後一個式子，結果是： frac ab q_0 dfrac 1q_1 dfrac 1q_2 dfrac 1ddots dfrac 1q_N q_0 q_1 q_2 cdots q_N 在上文的例子中計算了 gcd 1071 462 ，其中商 q_k 分別是 2、3、7，所以分數 frac 1071462 可以寫成如下連分數形式： frac 1071462 2 frac 13 frac 17 2 3 7 整數分解演算法 計算最大公約數是很多整數分解演算法的重要步驟，如高德納，pp 369371、Shor 演算法、以及。用輾轉相除法算最大公約數效率非常高。而連分數分解法由於用到了連分數，所以也需要使用輾轉相除法高德納，pp 380384。 演算法效率 輾轉相除法的計算效率已經被徹底研究過了。高德納，pp 339364 一個演算法的效率可以用計算所需步數乘以每步計算的開銷表示。加百利拉梅於 1884 年指出，用輾轉相除法計算兩個數的最大公約數所需的步數不會超過其中較小數十進位制下的位數 h 的 5 倍。因為每一步的計算開銷通常也是 h 數量級的，所以輾轉相除法的複雜度是 h2 。 計算步數 計算兩個自然數 a 和 b 的最大公約數所需的步數可以表示為 T ab 。高德納，p 344 如果 a 和 b 的最大公約數是 g ， amg ， bng ，而 m 和 n 是兩個互素整數，那麼： T abT mn 這可以透過在輾轉相除法的計算過程中的每一步都除以 g 來證明。Ore p 45 同樣，當 a 和 b 同時乘以 w 時，計算步數不變： T abT wawb 。所以，對於數值上相近的數，如 T ab 和 T ab1 ，計算步數可能相差很大。 根據輾轉相除法的遞迴性質可以得出另一個公式： T ab1T br_02T r_0r_1cdotsNT r_N2r_N1N1 其中，根據定義有 T x00 。 最差情況 假設用輾轉相除法求自然數 a 和 b （ ab0 ）的最大公約數需要 N 步，那麼滿足這一條件的 a 和 b 的最小值分別是斐波那契數 F_N2 和 F_N1 。高德納，p 343 這可以用數學歸納法證明。Mollin p 21 假設 N1 ， b 整除 a ，滿足這一條件的 a 和 b 最小是 b1 、 a2 ，正是 F_2 和 F_3 。現在假設這一規律對 M1 有效。一個需要 M 步的演算法的第一步是 aq_0 br_0 ，第二步是 bq_1 r_0r_1 。因為演算法是遞迴的，它需要 M1 步才能算出 gcd b r_0 ，其中 b 和 r_0 的最小值是 F_M1 和 F_M 。所以 a 的最小值是當 q_01 的時候，此時 qbr_0F_M1F_MF_M2 。1844 年，加百利拉梅發現這個證明標誌著計算複雜性理論的誕生。LeVeque p 35 這也是斐波那契數列的第一個實際應用。 這個結果也證明了輾轉相除法的運算步驟不會超過較小數十進位制下的位數的五倍。Mollin pp 2122 因為如果演算法需要 N 步，那麼 b 一定大於或等於 F_N1 ，也就是一定大於或等於 varphiN1 ，其中 varphi 是黃金分割比。因為 bgeq varphiN1 ，所以 N1leq log_varphi b 。因為 log_10varphi frac 15 ， frac N15log_10varphi log_varphi blog_10 b ，所以 Nleq 5 log_10 b 。所以，輾轉相除法不會進行超過 O h 次除法，其中 h 是較小數 b 在十進位制下的位數。 平均情況 輾轉相除法的平均步驟數有三種不同的定義。第一種定義是計算已知自然數 a 和從 0 到 a1 範圍內隨機選取的自然數 b 的最大公約數所需的時間 T a ： T a frac 1a sum_0 leq ba T a b 但是因為 T ab 在連續整數間變化非常劇烈，所以 T a 的值也會顯得很雜亂。高德納，p 353 為了解決這個問題，第二種定義規定 tau a 只要取遍其中所有和 a 互素的數即可： tau a frac 1varphi a sum_0 leq ba mathrm GCDa b 1 T a b 在小於 a 的數中，有 varphi a 個數與 a 互素，其中 varphi 是尤拉函式。在這個定義中， tau a 的函式值增長得平穩很多。高德納，p 357 tau a frac 12pi2 ln 2 ln a C O afrac 16 varepsilon 誤差項的增長率為 O a frac 16varepsilon ，其中 varepsilon 是無窮小量。公式中的常數 C 等於： C frac 12 6 frac ln 2pi24gamma 24pi2zeta2 3 ln 2 2 approx 1467 其中 gamma 是尤拉 馬歇羅尼常數， zeta 是黎曼 ζ 函式的導數。公式最左邊的 frac 12pi2ln 2 由兩個獨立的方法確定。 因為第一種定義可以透過用第二種定義的求和來完成：高德納，p 354 T a frac 1a sum_d a varphi d tau d 所以也可以由以下公式近似： T a approx C frac 12pi2 ln 2 ln a sum_da frac Lambda dd 其中 Lambda d 是馮曼戈爾特函式。高德納，p 355 第三種定義 Y n 定義為從 1 到 n 間隨機選取 a 和 b （均勻分佈）時計算它們的最大公約數所需的平均步驟數： Y n frac 1n2 sum_a1n sum_b1n T a b frac 1n sum_a1n T a 將 T a 的近似公式代入，得到 Y n 的近似：高德納，p 356 Y n approx frac 12pi2 ln 2 ln n 006 每一步的計算開銷 在輾轉相除法的每一步中，商 q_k 和餘數 r_k 都透過 r_k2 和 r_k1 求出： r_k2q_k r_k1r_k 所以每一步的計算開銷主要與計算商 q_k 的演算法有關，因為餘數 r_k 可以很迅速地從 r_k2 、 r_k1 和 q_k 計算出來： r_kr_k2q_k r_k1 而計算一個 h 位整數的除法的演算法複雜度是 O h ℓ1，其中ℓ l 是商的位數。高德納，pp 257261 作為對比，輾轉相除法原先的版本使用的是減法，因此效率要慢很多。進行一次除法等同於進行 q 次減法（其中 q 是商）。如果 a 和 b 的比很大，計算出的商也很大，也就需要進行很多次減法。但在另一方面，計算出來的商在大多數情況下都是非常小的，除法中得出一個確定的商 q 的機率大約是 log_2 left frac uu1right。其中 uq12 。高德納，p 352 比如，商是 1、2、3、4 的可能性分別是大約 415、170、93、59。因為計算機計算減法要快於除法，特別是對於很大的數字，所以減法版本的輾轉相除法的效能可以比得上除法版本。Cohen p 14 這也被運用於二進位制最大公約數演算法。Cohen pp 1415 1718 綜合考慮演算法需要的步數和每一步的計算開銷，輾轉相除法隨兩個數字 a 和 b 的平均位數成平方級的速度增長（ h2 ）。設 h_0h_1cdotsh_N1 表示計算過程中的餘數 r_0r_1cdotsr_N1 的位數，因為演算法的步數 N 隨 h 線性增長，所以演算法的運算時間為： OBig sum_iN h_i h_ih_i12Bigsubseteq OBig hsum_iNh_ih_i12Bigsubseteq O h h_02Nsubseteq O h2 其他演算法的效率 因為輾轉相除法的高效率，它在實踐中被廣泛使用。作為對比，本段中介紹以下輾轉相除法以外的其他最大公約數演算法的效率。 計算兩數 a 和 b 的最大公約數有一個效率很慢的演算法：將 a 除以從 2 到 b 之間的每一個整數以計算出它們所有的公約數，其中最大的一個即是最大公約數。在這個演算法中，步驟數隨 b 線性增長，也就是隨輸入數字的位數呈指數級增長。另一個很低效的演算法是計算出兩個數的所有素因數（見上文），最大公約數等於所有公共素因數的乘積。但是整數分解演算法效率極低，很多現代的加密系統甚至依靠這種低效率來防止資料被破解。 除了輾轉相除法之外，也有一些高效的演算法存在，如二進位制最大公約數演算法將除法操作替換成了二進位制的移位，以進一步提高用計算機運算時的效率。高德納，pp 321323 但是，這種改變並沒有降低演算法的複雜度（仍然是 O h²），雖然它在計算機上確實比輾轉相除法快些。也可以透過只檢視 a 和 b 的前幾位數來進一步提高效率，不過效果並不明顯。高德納，p 328 二進位制版的演算法還可以擴充套件到其它進位制，效率最多可以提升五倍。 對於超過 25000 位數的大數，有一種改進使演算法複雜度降低至平方級以下，如 Schönhage Volume 1423 in Lecture notes in Computer Science、Stehlé、Zimmermann 等人提出的演算法。這些演算法利用 22 的矩陣（見上文）。這些亞平方級的演算法複雜度通常是 O h log h2log log h 。 其他數系 如上文所述，輾轉相除法最早用來尋找兩自然數的最大公約數，但其實它也可以被推廣至實數，甚至是多項式、二次整數和赫爾維茨四元數。在這些數系中，輾轉相除法甚至被用來證明一個重要特性：惟一分解，即這些數系中的數能夠被惟一地分解成不可約元素（素數在這些數系的對應物）。惟一分解是數論中很多證明的基礎。 有理數和實數 輾轉相除法可以被應用至實數，如歐幾里得在幾何原本第 10 卷中所說的那樣。演算法的目的是計算出實數 g ，使已知實數 a 和 b 是它的整數倍： amg 、 bng ，其中 m 和 n 是整數。這也就找到了 a 和 b 的整數關係，即找到整數 s 和 t 使 satb0 。歐幾里得使用輾轉相除法來處理不可通約的長度。 實數的輾轉相除法和整數的演算法有兩個區別。第一，餘數 r_k 是實數，雖然商 q_k 仍然是整數。第二，演算法不能保證在有限步內結束。如果能在有限步內結束，那麼分數 frac ab 是一個有理數，即： frac ab frac mgng frac mn 於是我們可以寫出它的有限連分數形式： q_0q_1q_2cdotsq_n 。如果演算法無法結束，那麼 frac ab 是無理數，可以寫成無限的連分數形式： q_0q_1q_2cdots 。無限連分數的一個例子是：黃金分割比 varphi111cdots 和 2 的算術平方根：。通常，演算法能夠結束的可能性是很低的，因為對於實數 a 和 b ，幾乎所有 frac ab 都是無理數。 如果演算法不結束，也可以在第 k 步時終止計算，得到近似連分數 q_0q_1q_2cdotsq_k 。終止時的 k 越大，則近似越準確。連分數 frac mn 的分子和分母互素並滿足下式： m_kq_k m_k1m_k2 n_kq_k n_k1n_k2 其中遞迴的初始值是 m_1n_21 m_2n_10 。 frac m_kn_k 是 frac ab 在分母是 n_k 的數中最精確的有理數近似值： leftfrac ab frac m_kn_kright frac 1n_k2 多項式 只含有一個變數 x 的多項式可以和整數一樣進行加法、乘法和分解為不可約多項式（也就是多項式中的 素數）。兩個多項式 a x 和 b x 的最大公約數 g x 定義為它們分解之後共有的不可約因式的乘積，這可以用輾轉相除法進行計算。對於多項式的演算法和整數的演算法很相似，在每個步驟 k，計算出滿足以下遞迴式的商多項式 q_k x 和餘數多項式 r_k x ： r_k2xq_k x r_k1xr_k x 其中 r_2xa x ， r_1xb x 。所選擇的商式必須能使 q_k x r_k1x 的首項系數和 r_k2x 的相等，這樣才能保證每個餘數的次數小於前一個餘數（ deg r_k xdeg r_k1x ）。因為非零多項式的次數是非負整數，並且在每一步都減小，所以輾轉相除法的計算一定能在有限步內結束。最後一個非零餘數即是兩個多項式 a x 和 b x 的最大公約數。Cox pp 3746 例如，有如下兩個四次多項式，都可以分解成兩個二次多項式的乘積： a xx44x34x23x14x25x7x2x2 和 b xx48x312x217x6x27x3x2x2 a x 除以 b x 得到餘數： r_0 x x3 frac 23 x2 frac 53 x frac 23 在下一步中， b x 除以 r_0 x 得到 r_1 xx2x2 。最終， r_0 x 除以 r_1 x 得到的餘數為 0，所以 r_1 x 是 a x 和 b x 的最大公約數，這和它們因式分解的結果相符合。 上文所述的很多應用也適用於多項式。Schroeder pp 254259 輾轉相除法可以解多項式的線性丟番圖方程和中國剩餘定理，也可以用來定義多項式的連分數展開式。 多項式的輾轉相除法也有其他應用，如施圖姆定理，一個用於計算多項式在給定區間內的實根個數的方法。這被應用於其他領域，如控制論的勞斯 赫爾維茨穩定性判據。 最後，多項式的係數不必侷限於整數、實數、甚至複數。這些係數可以是其他域中的元素，如上文所述的有限域 mathrm GFp 。從輾轉相除法得出的結論也可以直接推廣至這類多項式。 高斯整數 高斯整數是滿足 alphauvi 的複數，其中 u 和 v 是普通整數， i 是虛數單位（1 的平方根）。透過在高斯整數中定義輾轉相除法，根據上文貝祖等式可以證明高斯整數的惟一分解。 See also Werke 267148 高斯整數的惟一分解性質在很多應用中都很重要，如計算勾股數或者證明費馬平方和定理。輾轉相除法用於這些應用很方便，但並非必不可少，一些定理也可以由其他方式證明。 對於兩個高斯整數 alpha 和 beta 的輾轉相除法和普通整數只有兩個區別。像整數一樣，演算法的第 k 步計算出商 q_k 和餘數 r_k ： r_kr_k2q_k r_k1 其中 r_k2alpha ， r_k1beta ，每個餘數都嚴格地小於前一個餘數， r_kr_ k1 。第一個區別即是：商和餘數都是高斯整數，也就是複數，所以商 q_k 是透過對實際比例（如複數 alpha beta ）的實部和虛部取最近似整數來找出的。第二個區別就是需要定義複數比較大小的方法。所以我們定義一個範數函式 f uviu2v2 ，以將高斯整數 uvi 轉換成普通整數來比較大小。在每個步驟 k 中，餘數的範數 f r_k 必須小於前一個餘數的範數 f r_k1 。因為範數是非負整數並且在每一步都減小，所以輾轉相除法在有限步內一定能結束。最後一個非零餘數即是 alpha 和 beta 的最大公約數，即能同時整除 alpha 和 beta 的整數中範數最大的一個。若把乘以 pm 1 或 pm i 的所得結果考慮在內，那麼可以說 alpha 和 beta 的最大公約數是唯一的。 很多其他應用如線性丟番圖方程、中國剩餘定理都適用於高斯整數，高斯整數的連分數也可以用輾轉相除法定義。 歐幾里得整環 如果一個支援兩種二元運算（ 和）的元素的集合形成一個交換環 R 並且可以使用輾轉相除法求最大公約數，那麼這個集合叫做歐幾里得整環。Stark p 290Cohn pp 104105 這兩個二元運算不必是平常算數中的加法和乘法，它們可以是更廣泛的概念，如群或么半群中的運算。但是這些運算仍然需要遵守交換律、結合律、分配律。 推廣之後的輾轉相除法需要一個歐幾里得函式，即一個將 R 對映到非負整數集合的函式 f ，使得對於 R 中非零元素 a 和 b ， R 中存在 q 和 r 滿足 aqbr ， f rf b 。例如上文中用於高斯整數的範數函式。這個函式 f 可以是數的絕對值或模，也可以是多項式的次數，只要輾轉相除法計算過程中它的值不斷減小就行，這樣演算法便能在有限步內結束。這非常依賴於非負整數的良序性，即每個非空的非負整數集合都有一個最小數。 任何歐幾里得整環都滿足算數基本定理：歐幾里得整環中的數可以惟一分解。所以任何歐幾里得整環都是惟一分解整環，但反之不然。歐幾里得整環是 GCD 整環（任意兩元素都存在最大公約數的整環）的子類。也就是說，在某些整環中，兩元素存在最大公約數但卻不能用輾轉相除法計算。歐幾里得整環都是主理想環，即其中每一個理想都是主理想，但並不是每個主理想環都是歐幾里得整環。 歐幾里得整環的惟一分解性質在很多場合都非常有用。例如，高斯整數的惟一分解性質可以方便地匯出勾股數的公式，或者證明費馬平方和定理。惟一分解性質也是加百利拉梅於 1847 年基於約瑟夫劉維爾的建議發表的證明費馬最後定理的嘗試中的關鍵部分。拉梅的嘗試需要形如 xomega y 的數的惟一分解性質，其中 x 和 y 是整數， omegaefrac 2ipin 是 1 的 n 次方根，即 omegan1 。雖然這對於某些 n 成立（如 n3 時的艾森斯坦整數），但在其他情況下並非總是正確的。惟一分解性質在分圓域的失效使恩斯特庫默爾發明了理想數的概念，隨後理查德戴德金創造了理想的概念。 二次整數的惟一分解 二次整數環對於解釋歐幾里得整環很有幫助。二次整數是高斯整數的推廣，高斯整數中的虛數單位 i 被替換成一個複數 ω。二次整數的形式是 uvomega ，其中 u 和 v 是整數， omega 有兩種形式，取決於引數 D 。如果 D 不等於四的倍數加一，那麼： omega sqrt D 如果 D 等於四的倍數加一，那麼： omega frac 1 sqrt D2 如果二次整數環有像上文用來比較高斯整數的那樣的範數函式，那麼它就是規範歐幾里德整環。只有當 D 11 7 3 2 1 2 3 5 6 7 11 13 17 19 21 29 33 37 41 57 或 73 時，二次整數環才是規範歐幾里德整環。 D 1 和3 時的二次整數分別叫作高斯整數和艾森斯坦整數。 但如果範數函式 f 可以是任何歐幾里得函式，那麼使二次整數環是歐幾里得整環的 D 的可能值到目前為止還不確定。是歐幾里得整環但不是規範歐幾里德整環的第一個例子（ D69 ）發表於 1994 年。溫伯格於 1973 年證明，在廣義黎曼猜想成立的前提下， D0 時的二次整數環是歐幾里得整環，當且僅當它是一個主理想環。 非交換環 輾轉相除法也可以應用至非交換環，如赫爾維茨四元數。令 alpha 和 beta 表示這樣一個環中的兩個元素。他們有右公約數 delta 如果 alphaxidelta betaetadelta （ xi 和 eta 是環中的元素）。同樣，他們有左公約數 delta 如果 alphadeltazeta betadeltaeta （ xi 和 eta 是環中的元素）。因為乘法不符合交換律，也就有兩個版本的輾轉相除法，一個計算右公約數，一個計算左公約數。例如對於右公約數，輾轉相除法求最大公約數的第一步可以寫成： rho_0alphapsi_0betazetapsi_0etadelta 其中 psi_0 是商， rho_0 是餘數。對於左公約數，第一步過程是： rho_0alphabetapsi_0delta zetaetapsi_0 不管是哪一種，這個過程都會重複到最大左公約數或者最大右公約數計算出，像在歐幾里得整環中一樣， rho_0 的 大小 一定小於 beta ，並且對於 rho_0 只有有限種的可能大小，這樣才能保證演算法能夠結束。 由輾轉相除法得出的大多數結果都適用於非交換環。例如，貝祖等式表明最大右公約數可以表示成的倍數和的倍數的和，即，存在 sigma 和 tau 使： Gamma_text 右sigmaalphataubeta 對於最大左公約數，等式如下： Gamma_text 左alphasigmabetatau 貝祖等式可以用來解非交換環的丟番圖方程。 推廣至其他數學結構 輾轉相除法有三個性質保證它不會永遠進行下去。第一，它可以寫成一系列遞迴式： r_kr_k2q_k r_k1 其中每一個餘數都比前一個餘數小， r_k r_k1 。第二，餘數的大小有嚴格下限，如 r_kgeq 0 。第三，小於 r_k 的數的數量是有限的。輾轉相除法推廣至其他數學結構，如和超限序數時仍保持這種性質。 輾轉相除法的一個重要推廣是代數幾何中格羅布納基的概念。像前文所述， a 和 b 的最大公約數 g 是它們的理想的生成元素。也就是說，對任何整數 s 和 t ，存在另一個整數 m 使： satbmg 雖然這對一元多項式也成立，但是對多元多項式就不成立了。Cox p 65 在多元多項式的情況下，生成元素的有限集合 g_1g_2cdots 可以定義如下： satbmathrm sum_k m_kg_k 其中 s 、 t 和 m_k 是多元多項式。Cox pp 7379 任何這樣的多元多項式 f 可以表示成生成多項式的和加上惟一的餘數多項式 r 通常叫做多項式 f 的一般形式。 frmathrm sum_k q_kg_k 雖然商多項式 q_k 可能不惟一。Cox pp 7986 這些生成多項式的集合就叫做格羅布納基。Cox p 74 參考文獻 引用 來源 書籍 外部連結 Demonstrations of Euclids algorithm Euclids Algorithm at cuttheknot The Euclidean Algorithm at MathPages Euclids Game at cuttheknot Music and Euclids algorithm Category 數論演算法 Category 數論 Category 帶有虛擬碼示例的條目 Category 帶有程式碼示例的條目