輾轉相除法

數學中,輾轉相除法,又稱歐幾里得演算法(英語:Euclidean algorithm),是求最大公因數演算法。輾轉相除法首次出現於歐幾里得的《幾何原本》(第VII卷,命題i和ii)中,而在中國則可以追溯至東漢出現的《九章算術》。

輾轉相除法的演示動畫:
兩條線段長分別可表示252和105,則其中每一小分段長代表最大公因數21。如動畫所示,只要輾轉地從大數中減去小數,直到其中一段的長度為0,此時剩下的一條線段的長度就是252和105的最大公因數。

兩個整數的最大公因數是能夠同時整除它們的最大的正整數。輾轉相除法基於如下原理:兩個整數的最大公因數等於其中較小的數和兩數相除餘數的最大公因數。例如,欲求252和105的最大公因數();因為,所以這個最大公因數也是42與105的最大公因數()。在這個過程中,較大的數縮小了,所以繼續進行同樣的計算可以不斷縮小這兩個數直至餘數為零。這時,所剩下的還沒有變成零的數就是兩數的最大公因數。由輾轉相除法也可以推出,兩數的最大公因數可以用兩數的整數倍相加來表示,如。這個重要的結論叫做貝祖定理

輾轉相除法最早出現在歐幾里得的《幾何原本》中(大約公元前300年),所以它是現行的演算法中歷史最悠久的。這個演算法原先只用來處理自然數和幾何長度(相當於正實數),但在19世紀,輾轉相除法被推廣至其他類型的數學物件,如高斯整數和一元多項式。由此,引申出歐幾里得整環等等的一些現代抽象代數概念。後來,輾轉相除法又擴充至其他數學領域,如紐結理論多元多項式

輾轉相除法有很多應用,它甚至可以用來生成全世界不同文化中的傳統音樂節奏。[1]在現代密碼學方面,它是RSA演算法(一種在電子商務中廣泛使用的公鑰加密演算法)的重要部分。它還被用來解丟番圖方程,比如尋找滿足中國剩餘定理的數,或者求有限體元素。輾轉相除法還可以用來構造連分數,在史特姆定理和一些整數分解演算法中也有應用。輾轉相除法是現代數論中的基本工具。

輾轉相除法處理大數時非常高效,如果用除法而不是減法實現,它需要的步驟不會超過較小數的位數(十進制下)的五倍。拉梅於1844年證明了這點,同時這也標誌着計算複雜性理論的開端。

背景

最大公因數

歐幾里得的輾轉相除法計算的是兩個自然數  的最大公因數 ,意思是能夠同時整除  的自然數中最大的一個。兩個數的最大公因數通常寫成 ,或者簡寫成 [2],但是第二種寫法也被使用在其他數學概念,如二維向量的坐標。

如果 ,則稱  互質[3]ab是否互質和它們是否質數無關。[4]如,6和35都不是質數,因為它們都可以分解為多於一個質因數的乘積:6 = 2 × 3,35 = 5 × 7。但是,6和35互質,因為除了1以外沒有自然數同時整除6和35。

 
一個24×60的長方形正好被十個12×12的方格填滿,其中12是24和60的最大公因數。一般地,若且唯若   的公因數時, 尺寸的長方形可被邊長c的正方形正好填滿。

 。由於  都是 的整數倍,所以可以寫成 ,並且不存在更大的整數 使等式成立。為了使 儘可能大,就要使  中所有公因數都提取出來歸入 中,所以自然數  一定互質,並且  的最大公因數 可以被  的所有其他公因數 整除。[5]

我們可以用右圖來解釋最大公因數的概念:[6]設一個長方形的邊長為  。因為  的任何公因數 都可以整除  ,所以長方形的邊都可以等分為長度為 的線段,也就是長方形可以被邊長為 的正方形正好填滿。而最大公因數 是所有可能的 中最大的一個。例如,一個24 × 60的長方形區域可以分成1 × 1、2 × 2、3 × 3、6 × 6或12 × 12的正方形網格。也就是說,12是24和60的最大公因數。

  的最大公因數是兩數共有的質因數的乘積。[7]例如,462可以分解成2 × 3 × 7 × 11;1071可以分解成3 × 3 × 7 × 17。462和1071的最大公因數等於它們共有的質因數的乘積3 × 7 = 21。如果兩數沒有公共的質因數,那麼它們的最大公因數是1,也即這兩個數互質。輾轉相除法的優點就在於它能以有系統的方式求出兩數的最大公因數,而無需分別對它們作因式分解。[8][9]大數的質因數分解被認為是一個困難的問題,即使是現代的電腦也非常難於處理,所以許多加密系統的原理都是建基於此。[10]

在數學中,尤其是抽象代數環論中,最大公因數有一個更加巧妙的定義:[11]  的最大公因數 [11]  的線性和中的最小正整數,即所有形如 (其中  是整數)的數中的最小正整數。可以證明,所有 都是 的整數倍( ,其中 是整數)。用現代數學語言來說,  生成的理想即是由 生成的主理想。最大公因數的這個定義和其他定義的等價性將在下面描述。

三個數的最大公因數的定義和兩個數的相同,即是它們共有的質因數的積[12],它們或者也可以按下式計算[13]

 

所以,歐幾里得的輾轉相除法實際可以計算任意多整數的最大公因數。

歸納、遞歸和無窮遞降

下文的論證會用到三種相關的數學方法,分別是數學歸納法遞歸無窮遞降。數學歸納法[14]經常用來證明某個定理對所有自然數成立:[15]首先證明定理對一個特定的數 成立(通常是1);然後證明如果定理對自然數 成立的話,那麼它對自然數 成立。這樣,便可證明定理對所有大於 的自然數也成立。遞歸[16]是將相關的陣列成一個數列 ),[17]當中除初始項外,其中每一項都用前一項或前幾項表示。如斐波那契數列就是遞歸的,每一項 都等於  )。輾轉相除法中的一些等式也是遞歸的。最後,無窮遞降[18]是用方程的一個自然數解匯出比它小的自然數解。[19]但是,這種轉化不能永遠進行下去,因為只有有限個小於原來的自然數解的自然數。所以,要麼方程無解,不然在有限步內必然能得出最小的自然數解。在下文會用到此法來證明輾轉相除法一定會在有限步內結束。

演算法描述

計算過程

輾轉相除法是一種遞歸演算法,每一步計算的輸出值就是下一步計算時的輸入值。[20] 表示步驟數(從0開始計數),演算法的計算過程如下。

每一步的輸入是都是前兩次計算的非負餘數  。因為每一步計算出的餘數都在不斷減小,所以, 小於 。在第 步中,演算法計算出滿足以下等式的 餘數 

 

其中 。也就是 要不斷減去 直到比 小。

為求簡明,以下只說明如何求兩個非負整數  的最大公約數(負數的情況是簡單的)。在第一步計算時( ),設  分別等於  ,第2步(此時 )時計算 (即 )和 (第一步計算產生的餘數)相除產生的商和餘數,以此類推。整個演算法可以用如下等式表示:

 
 
 
 
 

如果有 ,演算法的第一步實際上會把兩個數字交換,因為這時 除以 所得的商 會等於0,餘數 則等於 。然後,演算法的第二步便是把 除以 ,再計算所得之商和餘數。所以,對於 總有 ,即運算的每一步中得出的餘數一定小於上一步計算的餘數。

由於每一步的餘數都在減小並且不為負數,必然存在第 步時 等於0,使演算法終止[21] 就是  的最大公因數。其中 不可能無窮大,因為在 和0之間只有有限個自然數。

正確性的證明

輾轉相除法的正確性可以分成兩步來證明。[20]在第一步,我們會證明演算法的最終結果 同時整除  。因為它是一個公因數,所以必然小於或者等於最大公因數 。在第二步,我們證明 能整除 。所以 一定小於或等於 。兩個不等式只在 時同時成立。

具體證明如下:

  1. 證明 同時整除  
    因爲餘數 是0, 能夠整除 
     
    因爲 能夠整除 ,所以也能夠整除 
     
    同理可證 可以整除所有之前步驟的餘數,包括  ,即   的公約數, 
  2. 證明最大公約數 能整除 
    根據定義,  可以寫成 的倍數:  ,其中  是自然數。
    因爲 ,所以 整除 。 同理可證 整除每個餘數 
    因爲最大公約數 整除 ,因而 
  3. 所以 。即:[22][23]
     

舉例

 
演算法的演示動畫。最初的綠色矩形的長和寬分別是  ,從中不斷鋪上462×462的正方形直到剩下部分面積是462×147;然後再鋪上147×147的正方形直至剩下21×147的面積;最後,鋪上21×21的正方形時,綠色部分就沒有了。即21是1071和462的最大公因數。

例如,計算  的最大公因數的過程如下:從1071中不斷減去462直到小於462(可以減2次,即商 ),餘數是147:

 

然後從462中不斷減去147直到小於147(可以減3次,即 ),餘數是21:

 

再從147中不斷減去21直到小於21(可以減7次,即 ),沒有餘數:

 

此時,餘數是0,所以1071和462的最大公因數是21,這和用質因數分解得出的結果相同(見上文)用表格表示如下:

步驟數 算式 商和餘數
0     
1     
2     (演算法終止)

圖形演示

輾轉相除法的計算過程可以用圖形演示。[24]假設我們要在 矩形地面上鋪正方形瓷磚,並且正好鋪滿,其中 大於 。我們先嘗試用 的瓷磚,但是留下了 的部分,其中 。我們接着嘗試用 的正方形瓷磚鋪,又留下了 的部分,然後再使用 的正方形鋪……直到全部鋪滿為止,即到某步時正方形剛好覆蓋剩餘的面積為止。此時用到的最小的正方形的邊長就是原來矩形的兩條邊長的最大公因數。在圖中,最小的正方形面積是21×21(紅色),而原先的矩形(綠色)邊長是1071×462,所以21是1071和462的最大公因數。

計算商和餘數

在每個步驟 中,輾轉相除法都需要計算兩個數  的商 和餘數 

 

其中 。除法的演算法保證這樣的商和餘數總是存在。自然數的除法演算法還指出這樣的商和餘數是惟一的,但這對輾轉相除法而言並非必要。[25]

在歐幾里得最初的描述中,商和餘數是通過連續的減法來計算的,即從 中不斷減去 直到小於 。一個更高效的做法是使用整數除法和模除來計算商和餘數:

 

電腦實現

輾轉相除法可用偽代碼表示,比如除法版本可以寫成[26]

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) -> Option<isize> {
    match (x,y) {
        (0, 0)         => None,
        (a, 0)         => Some(a.abs()),
        (mut a, mut b) => { 
            while b != 0 {
                let t = b;
                b = a % b;
                a = t;
            }

            Some(a.abs()) 
        },
    }
}

Python 3版本:

def gcd(a, b):
    while b != 0:
        t = a % b
        a = b
        b = t
    return a

在第 次迴圈開始時,變數 的值是前一次運算的餘數 ,變數 的值是再前一次運算的餘數 。步驟 的作用等同於遞歸式 。變數 的功能是在下一個餘數 計算過程中臨時性地儲存 的值。在一次迴圈結束時,變數 的值是前一次運算的餘數 ,變數 的值是再前一次運算的餘數 

在歐幾里得定義的減法版本,取餘運算被減法替換。[27]

function gcd(a, b)
    if a = 0
       return b
    while b ≠ 0
        if a > b
           a ← a − b
        else
           b ← b − a
    return a

變數  的值分別是前兩次的餘數  。假定第 次迴圈開始時 大於 ,那麼 等於 ,因為 。在迴圈過程中, 重複減去 直到比 小,此時 就是下一個餘數 ;然後 重複減去 直到比 小,此時 就是下一個餘數 ;重複執行直到 

以下是遞歸版本[28]

function gcd(a, b)
    if b = 0
       return a
    else
       return gcd(b, a mod b)

C++遞歸版本如下:

int gcd(int n,int m)
{
    return  m == 0 ? n : gcd(m, n % m);
}

Rust遞歸版本:

fn gcd(x: isize, y: isize) -> Option<isize> {
    match (x,y) {
        (0, 0)  => None,
        (a, 0)  => Some(a.abs()),
        _       => gcd(y, x % y),
    }
}

Java版本:

public class MethodOfSuccessiveDivision {
    public static void main(String[] args) {
        System.out.println(gcd(1071, 462));
    }
    public static int gcd(int a, int b){
        if(b == 0){
            return a;
        }else{
            return gcd(b, a % b );
        }
    }
}

Python 3版本:

def gcd(a, b):
    return a if b == 0 else gcd(b, a % b)

例如 的計算過程是:函數的第一次呼叫計算 ;下一次呼叫計算 ,在接下來是 

使用絕對值最小的餘數

在另一個版本的演算法中,每一步還要把取餘運算時計算出的商增加一後再重新計算餘數(此時計算出的餘數應該是負的),然後取兩個餘數的絕對值較小的數作為下一步運算時使用的餘數。[29][30]取餘運算後,設 是計算出的餘數(此時為正), 是計算出的商:

 

即假設 。然後使用以下式子計算出一個負的餘數 

 

如果 ,那麼用 替換 進行下一次運算。如利奧波德·克羅內克所指出的,這個版本需要的運算步驟是歐幾里得演算法的所有版本中最少的。[29][30]

歷史發展

 
輾轉相除法可能在歐幾里得之前幾個世紀就已經有了。圖為使用兩腳規進行測量。

輾轉相除法是目前仍然在使用的歷史最悠久的演算法之一。[31]它首次出現於《幾何原本》(卷7命題1–2、卷10命題2–3)(大約公元前300年)。在卷7中用於整數,在卷10中用於線段的長度(以現代的觀點看,線段的長度可視為正實數,也就是說輾轉相除法實際可用於實數上,但是當時未有實數的概念)。卷10中出現的演算法是幾何的,兩段線段ab的最大公因數是ab公度中的最大值。

這個演算法可能並非歐幾里得發明,因為他也有將先前其他數學家的一些成果編進他的《幾何原本》。[32][33]數學家、歷史學家范德瓦爾登認為卷7的內容可能來自畢達哥拉斯學院出身的數學家寫的關於數論的教科書。[34]輾轉相除法在當時很可能已為尤得塞斯(大約公元前375年)所知 [31][35],甚至可能更早之前就已經存在[36][37],因為歐幾里得和亞里士多德的著作中都出現了ἀνθυφαίρεσις一詞(意為「輾轉相減」)。[38]

幾個世紀之後,輾轉相除法又分別被中國人和印度人獨立發現,[39]主要用來解天文學中用到的丟番圖方程以及制定準確的曆法。5世紀末,印度數學家天文學家阿里亞哈塔曾稱輾轉相除法為「粉碎機」,這可能是因為它在解丟番圖方程時很有效[40][41]在中國,《九章算術》中提到了一種類似輾轉相減法的「更相減損術」[42]。《孫子算經》中則出現了中國剩餘定理的一個特例[43],但是直到1247年秦九韶才於其《數學九章》中解答了該定理的一般情況,當中用到了他發明的大衍求一術。此法的其中一部分實際上便是輾轉相除的原理,秦九韶在書中對此有明確表述。[44]在歐洲,輾轉相除法首次出現於克勞德·巴希特英語Claude Gaspard Bachet de Méziriac的著作《愉悅討喜的問題》(Problèmes plaisants et délectables)的第二版[41]在歐洲,輾轉相除法被用於丟番圖方程和構建連分數。後來,英國數學家桑德森英語Nicholas Saunderson在其著作中收編了擴充歐幾里得演算法,作為一個有效計算連分數的方法。他將此法的來源歸名於羅渣·科茨英語Roger Cotes[45]

19世紀,輾轉相除法促成了新數系的建立,如高斯整數艾森斯坦整數。1815年,高斯用輾轉相除法證明高斯整數的分解是惟一的,儘管他的研究到了1832年才首度發表。[46]高斯在他的《算數研究》(出版於1801年)中實際上也有援引這個演算法,但僅是以連分數方法的形式敘述。[39]約翰·狄利克雷是第一個將輾轉相除法作為數論的基礎的數學家。[來源請求]狄利克雷提出,數論中的很多結論,如分解的惟一性,在任何使輾轉相除法適用的數系中均有效。[47]狄利克雷的數論講義後來經李察·戴德金編輯和推廣,戴德金也有以輾轉相除法來研究代數整數。比如,他是第一個用高斯整數的分解惟一性證明費馬平方和定理的數學家。[48]戴德金還率先定義了歐幾里得整環的概念。19世紀末,戴德金所定義的理想概念使得數論的重心不必建基於輾轉相除法,從而促進了理論的發展。[49]

「歐幾里得演算法是所有演算法的鼻祖,因為它是現存最古老的非凡演算法。」

——高德納,《電腦程式設計藝術,第二卷:半數值演算法》,第二版 (1981), p. 318.

輾轉相除法的其他應用發展於19世紀。1829年,史特姆將輾轉相除法用於史特姆序列(用於確定多項式的不同實根的個數的方法)。[50]

輾轉相除法是歷史上第一個整數關係演算法英語integer relation algorithm,即尋找兩個可通約實數的整數關係的演算法。近年來,出現了一些新穎的整數關係演算法,如埃拉曼·弗格森英語Helaman Ferguson和福爾卡德於1979年發表的弗格森-福爾卡德演算法(Ferguson–Forcade algorithm) [51]、以及與它相關的LLL演算法英語Lenstra–Lenstra–Lovász lattice basis reduction algorithmHJLS演算法以及PSLQ演算法[52][53]

1969年,科爾(Cole)和戴維(Davie)基於輾轉相除法創造了一種二人遊戲,叫做「歐幾里得遊戲」。[54]這個遊戲有最佳策略。[55]遊戲開始於兩列分別為ab個棋子組成的序列,玩家輪流從較長一列中取走較短一列棋子數量的m倍的棋子。如果兩列棋子pq分別由xy個棋子組成,其中x大於y,那麼玩家可以將序列p的棋子數量減少為自然數xmy。最後率先將一列棋子清空的玩家勝出。[56][57]

數學上的應用

貝祖等式

貝祖等式說明,兩個數  的最大公因數 可以表示為  的線性和。[58]也就是說,存在整數  使 [59][60]

整數  可以從輾轉相除法算出的商 計算出。[61] 從輾轉相除法的最後一步開始, 可以表示成前一步的商 和前兩步的餘數  

 

而前兩步的餘數又分別可以表示成它們前兩步的餘數和商:

 
 

將這兩行式子先後代入第一個式子,可以將 表示成  的線性和。重複進行迭代直到出現  

 
 
 

最終,g可以表示成  的線性和: 貝祖等式以及以上證明都可以擴充至歐幾里得整環

主理想和相關問題

貝祖等式提供了另一種定義  的最大公因數 的方法。[11]考慮形如 (其中  是整數)的數的集合。因為  都可以被 整除,所以這個集合中的所有元素都可以被 整除。也就是說這個集合中的數都可以表示成 的倍數,或者  的其他公因數的倍數。但是,只有最大公因數才是這個集合的元素。根據貝祖等式,有 。換言之,當  時得出 。任何其他的公因數都不是這個集合的元素,因為它們都不能被比它們大的 整除。相反地, 的任何倍數都屬於這個集合,只要令  ,便有:

 

所以,形如 的數的集合等於 的整數倍的集合。也就是說,任意兩個數的線性和的集合等同於它們最大公因數的整數倍的集合。  的最大公因數叫做  理想的生成元素。這個最大公因數的定義匯出了兩個現代抽象代數的概念:主理想(由單個元素生成的理想)以及主理想整環(其每一理想都是主理想的整環)。

這個結果可以解決某些實際問題。[62]例如,考慮兩個容積分別為  的量杯,其中  為正整數。通過加入或倒去 倍第一個量杯的體積以及 倍第二個量杯的體積的液體,任何體積為 的液體都可以被量出(只要 為正數)。根據貝祖等式,凡是可以被量出的液體,其體積一定是  的最大公因數 的倍數。

擴充歐幾里得演算法

貝祖等式的整數st可以通過擴充歐幾里得演算法算出。這個擴充演算法在原有輾轉相除法的基礎上增加了兩個遞歸等式:[63]

 
 

演算法開始時:

 ,  
 ,  

加上這兩個遞歸式後,當演算法終止於 ,貝祖等式的整數  分別由  給出。

這個演算法的正確性可以用數學歸納法來證明。假設遞歸至第 步是正確的,也就是假設:

 

 小於 時皆成立。則第 步運算得出以下等式:

 

因為  被假定是正確的,所以可以用  表示:

 

整理後得到第 步的結果,和我們期望值得到的結果一致:

 

矩陣法

整數  也可以用矩陣運算得出。[64]輾轉相除法的計算過程:

 
 
...
 

可以寫作2×2的商矩陣乘以一個2維餘數向量:

 

 表示所有商矩陣的乘積:

 

這使輾轉相除法化簡為:

 

如要用  的線性和表示 ,可將等式兩邊同時乘以矩陣 逆矩陣[64][65] 行列式等於 ,因為它等於商矩陣的行列式的乘積,而每一個的行列式都是−1。因為 的行列式不為零,最終的餘數向量可以利用 的逆矩陣解出:

 

由上式可以得出 

貝祖等式中的兩個整數分別是  。矩陣法的效率可前文描述的輾轉相除法的遞歸演算法是相同的,每一步都有兩次乘法和兩次加法。

歐幾里得引理和唯一分解

貝祖等式對輾轉相除法的很多應用都很重要,如證明自然數的唯一分解性質[66]假設數字L可以寫成兩個因數  的乘積,即 。如果另一個數  互質的數也能整除 ,那麼 必須整除 ,證明如下:如果  的最大公因數是1,則根據貝祖等式存在  使

 

兩邊都乘以 

 

因為 整除等式右邊,所以也應整除等式左邊的 。這個結果叫做歐幾里得引理[67]如果一個質數整除 那麼它至少整除 的一個因數。如果一個數 互質於數列  中的每一個數,則w也一定互質於它們的乘積 [67]

歐幾里得引理足以證明每一個自然數的質數分解是惟一的。[68]我們用反證法來證明,假設 可以分別分解成 個質數和 個質數,即:

 

根據假設,每個質數 都能整除 ,因此它必須能夠整除某個 ;因為 也是一個質數,所以 。同理,對於每一個 都存在一個 與它相等。所以兩種分解除了順序不同以外是完全相同的。整數分解的惟一性在數學證明中有很多應用,下文將會提到。

線性丟番圖方程

 
線性丟番圖方程 的圖像,它的解用藍點表示。

丟番圖方程是以亞歷山大數學家丟番圖的名字命名的一類方程,它的解被限制在整數範圍。[69]關於整數  的線性丟番圖方程形如:[70]

 

其中   是已知整數。這個方程可以寫成關於 同餘式:

 

   的最大公因數,  都能被 整除,故 能夠被 整除。所以, 一定能夠被 整除,不然方程就無解。方程兩邊若同時除以  ,方程就變成了貝祖等式:

 

其中  可以用擴充歐幾里得演算法求解。[71]所以這個丟番圖方程的一個解即是:

 

總體而言,丟番圖方程如果有解,就一定有無數個解。[72]只需要考慮兩個解  

 

或者可以寫成:

 

所以相鄰兩個解的 之間的差是  之間的差是 。這樣,所有的解都可以表示成:

 

 取遍所有整數時,方程所有的解都可以從 計算出來。如果限制為正整數解 (  ) 的話,那麼解的數量就可能是有限的。有時候,這種對解的限制使丟番圖方程在未知數個數比方程數更多的情況下仍然能有唯一解[73],而在允許實數解的線性方程組中,這種情況是不可能的。

乘法逆和RSA演算法

有限體是一個支援四種運算的數集。這四種運算也通稱為加法、減法、乘法、除法,跟一般的四則運算有相同的性質,如交換律結合律分配律。舉例來說,使用同餘可以讓13個數字的集合   構成一個有限體。在這個域中,任何數學運算(加減乘除)都歸約成13的,例如  。對於任意質數 ,都可以定義這種有限體;使用更複雜的方法,也可以對質數  次方定義這樣的有限體。有限體也叫做伽羅瓦域,其縮寫為   

在這樣一個有 個數的域中,任何非零元素 都存在惟一乘法逆  使 。這可以通過解同餘式 得出,[74]或者也可以解與之等價的丟番圖方程[75]

 

這個方程可用擴充歐幾里得演算法解出(參見上文)。在RSA演算法中,尋找乘法逆是非常重要的一步,它決定了使用哪個數來解密資訊。[76]雖然RSA演算法不使用域而是使用環,擴充歐幾里得演算法仍然可以用來求乘法逆。歐幾里得演算法也被應用於糾錯碼,例如,它可以代替伯利坎普-梅西演算法解基於有限體的BCH碼里德-所羅門碼[77]

中國剩餘定理

輾轉相除法也可以用來解線性丟番圖方程組。[78]如在中國剩餘定理中,整數可以表示成被 個互質的數 除留下的餘數:[79]

 

為了從  個餘數 中確定 的值,我們將這些式子組合成單個線性丟番圖方程,其中模數 是所有模數 的乘積,然後定義 如下:

 

也就是, 是除了 以外所有模數的乘積。接着是關鍵的一步,尋找 個數 使:

 

有了這些數 之後,整數 可以用下式從餘數 中解出:

 

因為  的乘法逆,所以可以使用擴充歐幾里得演算法求出(見上一節)。

連分數

輾轉相除法和連分數有着緊密的關係。[80]計算連分數的過程如下:

 

其中每個式子的右邊最後一項都等於下一個式子的左邊項的倒數。所以前兩個式子可以組合成:

 

第三個式子可以代入分母中的 

 

每一步中,最後一項 都可以用下一個式子代換,直至最後一個式子,結果是:

 

上文的例子中計算了 ,其中商 分別是2、3、7,所以分數   可以寫成如下連分數形式:

 

整數分解演算法

計算最大公因數是很多整數分解演算法的重要步驟[81],如Pollard's rho演算法英語Pollard's rho algorithm[82]Shor演算法[83]Dixon分解法英語Dixon's factorization method[84]以及Lenstra橢圓曲線分解英語Lenstra elliptic curve factorization[85]。用輾轉相除法算最大公因數效率非常高。而連分數分解法由於用到了連分數,所以也需要使用輾轉相除法[86]

演算法效率

 
用輾轉相除法求 GCD(x,y) 時所需的步數。紅點表示所需步驟較少(快),黃、綠、藍點所需步驟依次增加(慢)。

輾轉相除法的計算效率已經被徹底研究過了。[87]一個演算法的效率可以用計算所需步數乘以每步計算的開銷表示。加百利·拉梅於1884年指出[88],用輾轉相除法計算兩個數的最大公因數所需的步數不會超過其中較小數十進制下的位數 的5倍。[89][90]因為每一步的計算開銷通常也是 數量級的,所以輾轉相除法的複雜度 

計算步數

計算兩個自然數  的最大公因數所需的步數可以表示為 [91]如果  的最大公因數是   ,而  是兩個互質整數,那麼:

 

這可以通過在輾轉相除法的計算過程中的每一步都除以 來證明。[92]同樣,當  同時乘以 時,計算步數不變: 。所以,對於數值上相近的數,如  ,計算步數可能相差很大。

根據輾轉相除法的遞歸性質可以得出另一個公式:

 

其中,根據定義有 [91]

最差情況

假設用輾轉相除法求自然數   )的最大公因數需要 步,那麼滿足這一條件的  的最小值分別是斐波那契數  [93]這可以用數學歸納法證明。[94]假設  整除 ,滿足這一條件的  最小是  ,正是  。現在假設這一規律對 有效。一個需要 步的演算法的第一步是 ,第二步是 。因為演算法是遞歸的,它需要 步才能算出 ,其中  的最小值是  。所以 的最小值是當 的時候,此時  。1844年,加百利·拉梅發現這個證明標誌着計算複雜性理論的誕生。[95]這也是斐波那契數列的第一個實際應用。[93]

這個結果也證明了輾轉相除法的運算步驟不會超過較小數十進制下的位數的五倍。[96]因為如果演算法需要 步,那麼 一定大於或等於 ,也就是一定大於或等於 ,其中 黃金分割比。因為 ,所以 。因為  ,所以 。所以,輾轉相除法不會進行超過O(h)次除法,其中 是較小數 在十進制下的位數。

平均情況

輾轉相除法的平均步驟數有三種不同的定義。第一種定義是計算已知自然數 和從0到 範圍內隨機選取的自然數 的最大公因數所需的時間 [91]

 

但是因為 在連續整數間變化非常劇烈,所以 的值也會顯得很雜亂。[97]

為了解決這個問題,第二種定義規定 只要取遍其中所有和 互質的數即可:

 

在小於 的數中,有 個數與 互質,其中 歐拉函數。在這個定義中, 的函數值增長得平穩很多。[98][99]

 

誤差項的增長率為 ,其中 無窮小量。公式中的常數 等於:

 

其中 歐拉-馬歇羅尼常數 黎曼ζ函數的導數。[100][101]公式最左邊的 由兩個獨立的方法確定。[102][103]

因為第一種定義可以通過用第二種定義的求和來完成:[104]

 

所以也可以由以下公式近似:[105]

 

其中 馮·曼戈爾特函數[106]

第三種定義 定義為從1到 間隨機選取  均勻分佈)時計算它們的最大公因數所需的平均步驟數:[105]

 

 的近似公式代入,得到 的近似:[107]

 

每一步的計算開銷

在輾轉相除法的每一步中,商 和餘數 都通過  求出:

 

所以每一步的計算開銷主要與計算商 的演算法有關,因為餘數 可以很迅速地從   計算出來:

 

而計算一個 位整數的除法的演算法複雜度是O(h(+1)),其中 是商的位數。[108]

作為對比,輾轉相除法原先的版本使用的是減法,因此效率要慢很多。進行一次除法等同於進行 次減法(其中 是商)。如果  的比很大,計算出的商也很大,也就需要進行很多次減法。但在另一方面,計算出來的商在大多數情況下都是非常小的,除法中得出一個確定的商 的概率大約是 。其中 [109]比如,商是1、2、3、4的可能性分別是大約41.5%、17.0%、9.3%、5.9%。因為電腦計算減法要快於除法,特別是對於很大的數字[110],所以減法版本的輾轉相除法的效能可以比得上除法版本。[111]這也被運用於二進制最大公因數演算法。[112]

綜合考慮演算法需要的步數和每一步的計算開銷,輾轉相除法隨兩個數字  的平均位數成平方級的速度增長( )。設 表示計算過程中的餘數 的位數,因為演算法的步數  線性增長,所以演算法的運算時間為:

 

其他演算法的效率

因為輾轉相除法的高效率,它在實踐中被廣泛使用。作為對比,本段中介紹以下輾轉相除法以外的其他最大公因數演算法的效率。

計算兩數  的最大公因數有一個效率很慢的演算法:將 除以從2到 之間的每一個整數以計算出它們所有的公因數,其中最大的一個即是最大公因數。在這個演算法中,步驟數隨 線性增長,也就是隨輸入數字的位數呈指數級增長。另一個很低效的演算法是計算出兩個數的所有質因數(見上文),最大公因數等於所有公共質因數的乘積。[7]但是整數分解演算法效率極低,很多現代的加密系統甚至依靠這種低效率來防止資料被破解。[10]

除了輾轉相除法之外,也有一些高效的演算法存在,如二進制最大公因數演算法將除法操作替換成了二進制的移位,以進一步提高用電腦運算時的效率。[113][114]但是,這種改變並沒有降低演算法的複雜度(仍然是O(h²)),雖然它在電腦上確實比輾轉相除法快些。[115]也可以通過只檢視  的前幾位數來進一步提高效率,不過效果並不明顯。[116][117]二進制版的演算法還可以擴充到其它進制[118],效率最多可以提升五倍。[119]

對於超過25,000位數的大數,有一種改進使演算法複雜度降低至平方級以下[120],如Schönhage[121][122]、Stehlé、Zimmermann等人提出的演算法。[123]這些演算法利用2×2的矩陣(見上文)。這些亞平方級的演算法複雜度通常是 [115][124]

其他數系

如上文所述,輾轉相除法最早用來尋找兩自然數的最大公因數,但其實它也可以被推廣至實數,甚至是多項式二次整數赫爾維茨四元數。在這些數系中,輾轉相除法甚至被用來證明一個重要特性:惟一分解,即這些數系中的數能夠被惟一地分解成不可約元素(質數在這些數系的對應物)。惟一分解是數論中很多證明的基礎。

有理數和實數

輾轉相除法可以被應用至實數,如歐幾里得在幾何原本第10卷中所說的那樣。演算法的目的是計算出實數 ,使已知實數  是它的整數倍:  ,其中  整數[32]這也就找到了  的整數關係,即找到整數  使 。歐幾里得使用輾轉相除法來處理不可通約的長度[125][126]

實數的輾轉相除法和整數的演算法有兩個區別。第一,餘數 是實數,雖然商 仍然是整數。第二,演算法不能保證在有限步內結束。如果能在有限步內結束,那麼分數 是一個有理數,即:

 

於是我們可以寫出它的有限連分數形式: 。如果演算法無法結束,那麼 無理數,可以寫成無限的連分數形式: 。無限連分數的一個例子是:黃金分割比 2的主平方根 。通常,演算法能夠結束的可能性是很低的,因為對於實數  ,幾乎所有 都是無理數。

如果演算法不結束,也可以在第 步時終止計算,得到近似連分數 。終止時的 越大,則近似越準確。連分數 的分子和分母互質並滿足下式:

 
 

其中遞歸的初始值是 ,    在分母是 的數中最精確的有理數近似值:

 

多項式

只含有一個變數 的多項式可以和整數一樣進行加法、乘法和分解為不可約多項式(也就是多項式中的「質數」)。兩個多項式  的最大公因數 定義為它們分解之後共有的不可約因式的乘積,這可以用輾轉相除法進行計算。[127]對於多項式的演算法和整數的演算法很相似,在每個步驟 ,計算出滿足以下遞歸式的商多項式 和餘數多項式 

 

其中  。所選擇的商式必須能使 的首項系數和 的相等,這樣才能保證每個餘數的次數小於前一個餘數( )。因為非零多項式的次數是非負整數,並且在每一步都減小,所以輾轉相除法的計算一定能在有限步內結束。最後一個非零餘數即是兩個多項式  的最大公因數。[128]

例如,有如下兩個四次多項式,都可以分解成兩個二次多項式的乘積:

 

 .

 除以 得到餘數:

 

在下一步中, 除以 得到 。最終, 除以 得到的餘數為0,所以   的最大公因數,這和它們因式分解的結果相符合。

上文所述的很多應用也適用於多項式。[129]輾轉相除法可以解多項式的線性丟番圖方程和中國剩餘定理,也可以用來定義多項式的連分數展開式。

多項式的輾轉相除法也有其他應用,如史特姆定理,一個用於計算多項式在給定區間內的實根個數的方法。這被應用於其他領域,如控制論勞斯-赫爾維茨穩定性判據

最後,多項式的系數不必局限於整數、實數、甚至複數。這些系數可以是其他中的元素,如上文所述的有限體 。從輾轉相除法得出的結論也可以直接推廣至這類多項式。[127]

高斯整數

 
高斯質數u + vi複數平面的分佈,其中u2 + v2小於500。

高斯整數是滿足 的複數,其中  是普通整數 虛數單位(-1的平方根)。[130]通過在高斯整數中定義輾轉相除法,根據上文貝祖等式可以證明高斯整數的惟一分解。[46]高斯整數的惟一分解性質在很多應用中都很重要,如計算畢氏三元數或者證明費馬平方和定理[130]輾轉相除法用於這些應用很方便,但並非必不可少,一些定理也可以由其他方式證明。

對於兩個高斯整數  的輾轉相除法和普通整數只有兩個區別。像整數一樣,演算法的第 步計算出商 和餘數 

 

其中  ,每個餘數都嚴格地小於前一個餘數, 。第一個區別即是:商和餘數都是高斯整數,也就是複數,所以商 是透過對實際比例(如複數 / )的實部和虛部取最近似整數來找出的。第二個區別就是需要定義複數比較大小的方法。所以我們定義一個範數函數 ,以將高斯整數 轉換成普通整數來比較大小。在每個步驟 中,餘數的範數 必須小於前一個餘數的範數 。因為範數是非負整數並且在每一步都減小,所以輾轉相除法在有限步內一定能結束。最後一個非零餘數即是  的最大公因數,即能同時整除  的整數中範數最大的一個。若把乘以  的所得結果考慮在內,那麼可以說  的最大公因數是唯一的。

很多其他應用如線性丟番圖方程、中國剩餘定理都適用於高斯整數,高斯整數的連分數也可以用輾轉相除法定義。

歐幾里得整環

如果一個支援兩種二元運算(+ 和 ·)的元素的集合形成一個交換環R並且可以使用輾轉相除法求最大公因數,那麼這個集合叫做歐幾里得整環[131][132]這兩個二元運算不必是平常算數中的加法和乘法,它們可以是更廣泛的概念,如么半群中的運算。但是這些運算仍然需要遵守交換律結合律分配律

推廣之後的輾轉相除法需要一個歐幾里得函數,即一個將 對映到非負整數集合的函數 ,使得對於 中非零元素   中存在  滿足  。例如上文中用於高斯整數的範數函數。這個函數 可以是數的絕對值或模,也可以是多項式的次數,只要輾轉相除法計算過程中它的值不斷減小就行,這樣演算法便能在有限步內結束。這非常依賴於非負整數的良序性,即每個非空的非負整數集合都有一個最小數。

任何歐幾里得整環都滿足算數基本定理:歐幾里得整環中的數可以惟一分解。所以任何歐幾里得整環都是惟一分解整環,但反之不然。歐幾里得整環是GCD整環(任意兩元素都存在最大公因數的整環)的子類。也就是說,在某些整環中,兩元素存在最大公因數但卻不能用輾轉相除法計算。歐幾里得整環都是主理想環,即其中每一個理想都是主理想,但並不是每個主理想環都是歐幾里得整環。

歐幾里得整環的惟一分解性質在很多場合都非常有用。例如,高斯整數的惟一分解性質可以方便地匯出畢氏三元數的公式,或者證明費馬平方和定理[130]惟一分解性質也是加百利·拉梅於1847年基於約瑟夫·萊歐維爾的建議發表的證明費馬最後定理的嘗試中的關鍵部分。[133]拉梅的嘗試需要形如 的數的惟一分解性質,其中  是整數, 是1的 次方根,即 。雖然這對於某些 成立(如 時的艾森斯坦整數),但在其他情況下並非總是正確的。惟一分解性質在分圓體的失效使恩斯特·庫默爾發明了理想數的概念,隨後李察·戴德金創造了理想的概念。[來源請求]

二次整數的惟一分解

 
艾森斯坦質數 在複數平面的分佈(範數小於500, 等於1的立方根)。

二次整數環對於解釋歐幾里得整環很有幫助。二次整數是高斯整數的推廣,高斯整數中的虛數單位i被替換成一個複數ω。二次整數的形式是 ,其中  是整數, 有兩種形式,取決於參數 。如果 不等於四的倍數加一,那麼:

 

如果 等於四的倍數加一,那麼:

 

如果二次整數環有像上文用來比較高斯整數的那樣的範數函數,那麼它就是規範歐幾里德整環。只有當  −11, −7, −3, −2, −1, 2, 3, 5, 6, 7, 11, 13, 17, 19, 21, 29, 33, 37, 41, 57或73時,二次整數環才是規範歐幾里德整環[25]  −1和−3時的二次整數分別叫作高斯整數艾森斯坦整數

但如果範數函數 可以是任何歐幾里得函數,那麼使二次整數環是歐幾里得整環的 的可能值到目前為止還不確定。[134]是歐幾里得整環但不是規範歐幾里德整環的第一個例子( )發表於1994年[134]。溫伯格於1973年證明,在廣義黎曼猜想成立的前提下, 時的二次整數環是歐幾里得整環,若且唯若它是一個主理想環[135]

非交換環

輾轉相除法也可以應用至非交換環,如赫爾維茨四元數[136]  表示這樣一個環中的兩個元素。他們有右公因數 如果 ,    是環中的元素)。同樣,他們有左公因數 如果 ,    是環中的元素)。因為乘法不符合交換律,也就有兩個版本的輾轉相除法,一個計算右公因數,一個計算左公因數。例如對於右公因數,輾轉相除法求最大公因數的第一步可以寫成:

 

其中 是商, 是餘數。對於左公因數,第一步過程是:

 

不管是哪一種,這個過程都會重複到最大左公因數或者最大右公因數計算出,像在歐幾里得整環中一樣, 的「大小」一定小於 ,並且對於 只有有限種的可能大小,這樣才能保證演算法能夠結束。

由輾轉相除法得出的大多數結果都適用於非交換環。例如,貝祖等式表明最大右公因數可以表示成α的倍數和β的倍數的和,即,存在  使:

 

對於最大左公因數,等式如下:

 

貝祖等式可以用來解非交換環的丟番圖方程。

推廣至其他數學結構

 
輾轉相除法可以推廣至紐結理論[137]

輾轉相除法有三個性質保證它不會永遠進行下去。第一,它可以寫成一系列遞歸式:

 

其中每一個餘數都比前一個餘數小, 。第二,餘數的大小有嚴格下限,如 。第三,小於 的數的數量是有限的。輾轉相除法推廣至其他數學結構,如纏結英語tangle (mathematics)[138]超限序數[139]時仍保持這種性質。

輾轉相除法的一個重要推廣是代數幾何格羅布納基的概念。像前文所述,  的最大公因數 是它們的理想的生成元素。也就是說,對任何整數  ,存在另一個整數 使:

 

雖然這對一元多項式也成立,但是對多元多項式就不成立了。[140]在多元多項式的情況下,生成元素的有限集合 可以定義如下:

 

其中   是多元多項式。[141]任何這樣的多元多項式 可以表示成生成多項式的和加上惟一的餘數多項式 , 通常叫做多項式 的一般形式。

 

雖然商多項式 可能不惟一。[142]這些生成多項式的集合就叫做格羅布納基。[143]

參考文獻

參照

  1. ^ 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. 47–56.
  2. ^ Stark, p. 16.
  3. ^ Stark, p. 21.
  4. ^ LeVeque, p. 32.
  5. ^ Leveque, p. 31.
  6. ^ Grossman JW. Discrete Mathematics. New York: Macmillan. 1990: 213. ISBN 0-02-348331-8. 
  7. ^ 7.0 7.1 Schroeder, pp. 21–22.
  8. ^ Schroeder, p. 19.
  9. ^ Ogilvy CS, Anderson JT. Excursions in number theory. New York: Oxford University Press. 1966: 27–29.
    LCCN 66-0 – 0
    .
     
  10. ^ 10.0 10.1 Schroeder, pp. 216–219.
  11. ^ 11.0 11.1 11.2 Leveque, p. 33.
  12. ^ Stark, p. 25.
  13. ^ Ore, pp. 47–48.
  14. ^ 高德納. The Art of Computer Programming(计算机程序设计艺术), Volume 1: Fundamental Algorithms 3rd. Addison-Wesley. 1997. ISBN 0-201-89683-4.  (Section 1.2.1: Mathematical Induction, pp. 11–21.)
  15. ^ Rosen, pp. 18–21.
  16. ^ Rosen, pp. 21–24.
  17. ^ Anderson JA. Discrete Mathematics with Combinatorics. Upper Saddle River, NJ: Prentice Hall. 2001: 165–223. ISBN 0-13-086998-8. 
  18. ^ Rosen, p. 492.
  19. ^ Anderson JA. Discrete Mathematics with Combinatorics. Upper Saddle River, NJ: Prentice Hall. 2001: 109–119. ISBN 0-13-086998-8. 
  20. ^ 20.0 20.1 Stark, pp. 16–20.
  21. ^ Stark, p. 18.
  22. ^ 高德納, p. 320.
  23. ^ Lovász L, Pelikán J, Vesztergombi K. Discrete Mathematics: Elementary and Beyond. New York: Springer-Verlag. 2003: 100–101. ISBN 0-387-95584-4. 
  24. ^ Kimberling C. A Visual Euclidean Algorithm. Mathematics Teacher. 1983, 76: 108–109. 
  25. ^ 25.0 25.1 Cohn, pp. 104–110.
  26. ^ 高德納, pp. 319–320.
  27. ^ 高德納, pp. 318–319.
  28. ^ Stillwell, p. 14.
  29. ^ 29.0 29.1 Ore, p. 43.
  30. ^ 30.0 30.1 Stewart BM. Theory of Numbers 2nd. New York: Macmillan. 1964: 43–44.
    LCCN 64-0 – 0
    .
     
  31. ^ 31.0 31.1 高德納, p. 318.
  32. ^ 32.0 32.1 Weil A. Number Theory. Boston: Birkhäuser. 1983: 4–6. ISBN 0-8176-3141-0. 
  33. ^ Jones A. Greek mathematics to AD 300. Companion encyclopedia of the history and philosophy of the mathematical sciences. New York: Routledge. 1994: 46–48. ISBN 0-415-09238-8. 
  34. ^ van der Waerden BL. Science Awakening. translated by Arnold Dresden. Groningen: P. Noordhoff Ltd. 1954: 114–115. 
  35. ^ von Fritz K. The Discovery of Incommensurability by Hippasus of Metapontum. Ann. Math. 1945, 46: 242–264. doi:10.2307/1969021. 
  36. ^ Heath TL. Mathematics in Aristotle. Oxford Press. 1949: 80–83. 
  37. ^ Fowler DH. The Mathematics of Plato's Academy: A New Reconstruction. Oxford: Oxford University Press. 1987: 31–66. ISBN 0-19-853912-6. 
  38. ^ Becker O. Eudoxus-Studien I. Eine voreuklidische Proportionslehre und ihre Spuren bei Aristoteles und Euklid. Quellen und Studien zur Geschichte der Mathematik B. 1933, 2: 311–333. 
  39. ^ 39.0 39.1 Stillwell, p. 31.
  40. ^ Rosen, pp. 86–87.
  41. ^ 41.0 41.1 Tattersall, p. 70.
  42. ^   九章算术. 維基文庫 (中文). 可半者半之;不可半者,副置分母、子之數,以少減多,更相減損,求其等也。以等數約之。 
  43. ^ Ore, pp. 247–248.
  44. ^ 洪萬生. 中國π的一頁滄桑. [2015-04-28]. (原始內容存檔於2016-03-05). 
  45. ^ Tattersall, pp. 72–76.
  46. ^ 46.0 46.1 Gauss CF. Theoria residuorum biquadraticorum. Comm. Soc. Reg. Sci. Gött. Rec. 1832, 4.  See also Werke, 2:67–148.
  47. ^ 狄利克雷, pp. 29–31.
  48. ^ Dedekind R. Supplement XI. PGL 狄利克雷 (編). Vorlesungen über Zahlentheorie. 1894. 
  49. ^ Stillwell J. Elements of Number Theory. New York: Springer-Verlag. 2003: 41–42. ISBN 0-387-95587-9. 
  50. ^ Sturm C. Mémoire sur la résolution des équations numériques. Bull. des sciences de Férussac. 1829, 11: 419–422. 
  51. ^ Weisstein, Eric W. (編). Integer Relation. at MathWorld--A Wolfram Web Resource. Wolfram Research, Inc. (英語). 
  52. ^ Peterson I. Jazzing Up Euclid's Algorithm. ScienceNews. 12 August 2002.  外部連結存在於|title= (幫助)
  53. ^ Cipra BA. The Best of the 20th Century: Editors Name Top 10 Algorithms. SIAM News (Society for Industrial and Applied Mathematics). 16 May 2000, 33 (4).  外部連結存在於|title= (幫助)
  54. ^ Cole AJ, Davie AJT. A game based on the Euclidean algorithm and a winning strategy for it. Math. Gaz. 1969, 53: 354–357. doi:10.2307/3612461. 
  55. ^ Spitznagel EL. Properties of a game based on Euclid's algorithm. Math. Mag. 1973, 46: 87–92. 
  56. ^ Rosen, p. 95.
  57. ^ Roberts J. Elementary Number Theory: A Problem Oriented Approach. Cambridge, MA: MIT Press. 1977: 1–8. ISBN 0-262-68028-9. 
  58. ^ Jones GA, Jones JM. Bezout's Identity. Elementary Number Theory. New York: Springer-Verlag. 1998: 7–11. 
  59. ^ Rosen, p. 81.
  60. ^ Cohn, p. 104.
  61. ^ Rosen, p. 91.
  62. ^ Schroeder, p. 23.
  63. ^ Rosen, pp. 90–93.
  64. ^ 64.0 64.1 Koshy T. Elementary Number Theory with Applications. Burlington, MA: Harcourt/Academic Press. 2002: 167–169. ISBN 0-12-421171-2. 
  65. ^ Bach E, Shallit J. Algorithmic number theory. Cambridge, MA: MIT Press. 1996: 70–73. ISBN 0-262-02405-5. 
  66. ^ Stark, pp. 26–36.
  67. ^ 67.0 67.1 Ore, p. 44.
  68. ^ Stark, pp. 281–292.
  69. ^ Rosen, pp. 119–125.
  70. ^ Schroeder, pp. 106–107.
  71. ^ Schroeder, pp. 108–109.
  72. ^ Rosen, pp. 120–121.
  73. ^ Stark, p. 47.
  74. ^ Schroeder, pp. 107–109.
  75. ^ Stillwell, pp. 186–187.
  76. ^ Schroeder, p. 134.
  77. ^ "Error correction coding: mathematical methods and algorithms", page 266, Todd K. Moon, John Wiley and Sons, 2005, ISBN 978-0-471-64800-0
  78. ^ Rosen, pp. 143–170.
  79. ^ Schroeder, pp. 194–195.
  80. ^ Vinogradov IM. Elements of Number Theory. New York: Dover. 1954: 3–13. 
  81. ^ Crandall R, Pomerance C. Prime Numbers: A Computational Perspective 1st. New York: Springer-Verlag. 2001: 225–349. ISBN 0-387-94777-9. 
  82. ^ 高德納, pp. 369–371.
  83. ^ Shor PW. Polynomial-Time Algorithms for Prime Factorization and Discrete Logarithms on a Quantum Computer. SIAM J. Sci. Statist. Comput. 1997, 26: 1484. 
  84. ^ Dixon JD. Asymptotically fast factorization of integers. Math. Comput. 1981, 36: 255–260. doi:10.2307/2007743. 
  85. ^ Lenstra Jr. HW. Factoring integers with elliptic curves. Annals of Mathematics. 1987, 126: 649–673. doi:10.2307/1971363. 
  86. ^ 高德納, pp. 380–384.
  87. ^ 高德納, pp. 339–364.
  88. ^ 加百利·拉梅. Note sur la limite du nombre des divisions dans la recherche du plus grand commun diviseur entre deux nombres entiers. Comptes Rendus Acad. Sci. 1844, 19: 867–870. 
  89. ^ Grossman H. On the Number of Divisions in Finding a G.C.D.. The American Mathematical Monthly. 1924, 31: 443. doi:10.2307/2298146. 
  90. ^ Honsberger R. Mathematical Gems II. The Mathematical Association of America. 1976: 54–57. ISBN 0-88385-302-7. 
  91. ^ 91.0 91.1 91.2 高德納, p. 344.
  92. ^ Ore, p. 45.
  93. ^ 93.0 93.1 高德納, p. 343.
  94. ^ Mollin, p. 21.
  95. ^ LeVeque, p. 35.
  96. ^ Mollin, pp. 21–22.
  97. ^ 高德納, p. 353.
  98. ^ 高德納, p. 357.
  99. ^ Tonkov T. On the average length of finite continued fractions. Acta arithmetica. 1974, 26: 47–57. 
  100. ^ Porter JW. On a Theorem of Heilbronn. Mathematika. 1975, 22: 20–28. 
  101. ^ 高德納 DE. Evaluation of Porter's Constant. Computers and Mathematics with Applications. 1976, 2: 137–139. doi:10.1016/0898-1221(76)90025-0. 
  102. ^ Dixon JD. The Number of Steps in the Euclidean Algorithm. J. Number Theory. 1970, 2: 414–422. doi:10.1016/0022-314X(70)90044-2. 
  103. ^ Heilbronn HA. On the Average Length of a Class of Finite Continued Fractions. Paul Turán (編). Number Theory and Analysis. New York: Plenum. 1969: 87–96.
    LCCN 68-0 – 00
    .
     
  104. ^ 高德納, p. 354.
  105. ^ 105.0 105.1 Norton GH. On the Asymptotic Analysis of the Euclidean Algorithm. Journal of Symbolic Computation. 1990, 10: 53–58. doi:10.1016/S0747-7171(08)80036-3. 
  106. ^ 高德納, p. 355.
  107. ^ 高德納, p. 356.
  108. ^ 高德納, pp. 257–261.
  109. ^ 高德納, p. 352.
  110. ^ Wagon S. Mathematica in Action. New York: Springer-Verlag. 1999: 335–336. ISBN 0-387-98252-3. 
  111. ^ Cohen, p. 14.
  112. ^ Cohen, pp. 14–15, 17–18.
  113. ^ 高德納, pp. 321–323.
  114. ^ Stein J. Computational problems associated with Racah algebra. Journal of Computational Physics. 1967, 1: 397–405. doi:10.1016/0021-9991(67)90047-2. 
  115. ^ 115.0 115.1 Crandall R, Pomerance C. Prime Numbers: A Computational Perspective 1st. New York: Springer-Verlag. 2001: 77–79, 81–85, 425–431. ISBN 0-387-94777-9. 
  116. ^ 高德納, p. 328.
  117. ^ Lehmer DH. Euclid's Algorithm for Large Numbers. The American Mathematical Monthly. 1938, 45: 227–233. doi:10.2307/2302607. 
  118. ^ Sorenson J. Two fast GCD algorithms. J. Algorithms. 1994, 16: 110–144. doi:10.1006/jagm.1994.1006. 
  119. ^ Weber K. The accelerated GCD algorithm. ACM Trans. Math. Soft. 1995, 21: 111–122. doi:10.1145/200979.201042. 
  120. ^ Aho A, Hopcroft J, Ullman J. The Design and Analysis of Computer Algorithms. New York: Addison–Wesley. 1974: 300–310. 
  121. ^ Schönhage A. Schnelle Berechnung von Kettenbruchentwicklungen. Acta Informatica. 1971, 1: 139–144. doi:10.1007/BF00289520. 
  122. ^ Cesari G. Parallel implementation of Schönhage's integer GCD algorithm. G. Buhler (編). Algorithmic Number Theory: Proc. ANTS-III, Portland, OR. New York: Springer-Verlag. 1998: 64–76.  Volume 1423 in Lecture notes in Computer Science.
  123. ^ Stehlé D, Zimmermann P. Gal’s accurate tables method revisited. Proceedings of the 17th IEEE Symposium on Computer Arithmetic (ARITH-17). Los Alamitos, CA: IEEE Computer Society Press. 2005. 
  124. ^ Möller N. On Schönhage's algorithm and subquadratic integer gcd computation. Mathematics of Computation. 2008, 77: 589–607. doi:10.1090/S0025-5718-07-02017-0. 
  125. ^ Boyer CB, Merzbach UC. A History of Mathematics 2nd. New York: Wiley. 1991: 116–117. ISBN 0-471-54397-7. 
  126. ^ Cajori F. A History of Mathematics. New York: Macmillan. 1894: 70. 
  127. ^ 127.0 127.1 塞爾日·蘭. Algebra 2nd. Menlo Park, CA: Addison–Wesley. 1984: 190–194. ISBN 0-201-05487-6. 
  128. ^ Cox, pp. 37–46.
  129. ^ Schroeder, pp. 254–259.
  130. ^ 130.0 130.1 130.2 Stillwell J. Elements of Number Theory. New York: Springer-Verlag. 2003: 101–116. ISBN 0-387-95587-9. 
  131. ^ Stark, p. 290.
  132. ^ Cohn, pp. 104–105.
  133. ^ Lamé G. Mémoire sur la résolution, en nombres complexes, de l'équation An + Bn + Cn = 0. J. Math. Pures Appl. 1847, 12: 172–184. 
  134. ^ 134.0 134.1 Clark DA. A quadratic field which is Euclidean but not norm-Euclidean. Manuscripta mathematica. 1994, 83: 327–330. doi:10.1007/BF02567617.  外部連結存在於|title= (幫助)
  135. ^ Weinberger P. Proc. Sympos. Pure Math.: 321–332.  |chapter=被忽略 (幫助); 缺少或|title=為空 (幫助)
  136. ^ Stillwell J. Elements of Number Theory. New York: Springer-Verlag. 2003: 151–152. ISBN 0-387-95587-9. 
  137. ^ Yamada Y. Generalized rational blow-down, torus knots, and Euclidean algorithm. arXiv:0708.2316v1. 2007.  外部連結存在於|title= (幫助)
  138. ^ John Horton Conway. An enumeration of knots and links, and some of their algebraic properties. Computational Problems in Abstract Algebra (Proc. Conf., Oxford, 1967). Pergamon. 1970: 329–358. 
  139. ^ Jategaonkar AV. Rings with transfinite left division algorithm. Bull. Amer. Math. Soc. 1969, 75: 559–561. doi:10.1090/S0002-9904-1969-12242-1.  外部連結存在於|title= (幫助)
  140. ^ Cox, p. 65.
  141. ^ Cox, pp. 73–79.
  142. ^ Cox, pp. 79–86.
  143. ^ Cox, p. 74.

來源

書籍

外部連結