fbpx
维基百科

輾轉相除法

數學中,辗转相除法,又称欧几里得算法(英語: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 algorithm、HJLS算法以及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]我们用反证法来证明,假设 可以分别分解成 个素数和 个素数,即:

 

根据假设,每个素数 都能整除 ,因此它必须能够整除某個 ;因为 也是一个素数,所以 。同理,对于每一个 都存在一个

輾轉相除法, 在數學中, 辗转相除法, 又称欧几里得算法, 英語, euclidean, algorithm, 是求最大公约数的算法, 辗转相除法首次出现于欧几里得的, 几何原本, 第vii卷, 命题i和ii, 而在中国则可以追溯至东汉出现的, 九章算术, 辗转相除法的演示动画, 两条线段長分别可表示252和105, 則其中每一小分段長代表最大公因數21, 如动画所示, 只要輾轉地从大数中减去小数, 直到其中一段的长度为0, 此时剩下的一条线段的长度就是252和105的最大公因数, 两个整数的最大公约数是能够同时整. 在數學中 辗转相除法 又称欧几里得算法 英語 Euclidean algorithm 是求最大公约数的算法 辗转相除法首次出现于欧几里得的 几何原本 第VII卷 命题i和ii 中 而在中国则可以追溯至东汉出现的 九章算术 辗转相除法的演示动画 两条线段長分别可表示252和105 則其中每一小分段長代表最大公因數21 如动画所示 只要輾轉地从大数中减去小数 直到其中一段的长度为0 此时剩下的一条线段的长度就是252和105的最大公因数 两个整数的最大公约数是能够同时整除它们的最大的正整数 辗转相除法基于如下原理 两个整数的最大公约数等于其中较小的数和两数相除余数的最大公约数 例如 欲求252和105的最大公约数 252 21 12 105 21 5 displaystyle 252 21 times 12 105 21 times 5 因为252 105 2 42 displaystyle 252 div 105 2 42 所以这个最大公约数也是42与105的最大公约数 42 21 2 displaystyle 42 21 times 2 在这个过程中 较大的数缩小了 所以继续进行同样的计算可以不断缩小这两个数直至余数为零 这时 所剩下的还没有变成零的数就是两数的最大公约数 由辗转相除法也可以推出 两数的最大公约数可以用两数的整数倍相加来表示 如21 5 105 2 252 displaystyle 21 5 times 105 2 times 252 这个重要的結論叫做貝祖定理 辗转相除法最早出现在欧几里得的 几何原本 中 大约公元前300年 所以它是现行的算法中歷史最悠久的 这个算法原先只用来处理自然数和几何长度 相當於正實數 但在19世纪 辗转相除法被推广至其他类型的數學物件 如高斯整数和一元多项式 由此 引申出欧几里得整环等等的一些现代抽象代数概念 后来 辗转相除法又扩展至其他数学领域 如纽结理论和多元多项式 辗转相除法有很多应用 它甚至可以用来生成全世界不同文化中的传统音乐节奏 1 在现代密码学方面 它是RSA算法 一种在电子商务中广泛使用的公钥加密算法 的重要部分 它还被用来解丢番图方程 比如寻找满足中国剩余定理的数 或者求有限域中元素的逆 辗转相除法还可以用来构造连分数 在施图姆定理和一些整数分解算法中也有应用 辗转相除法是现代数论中的基本工具 辗转相除法处理大数时非常高效 如果用除法而不是减法实现 它需要的步骤不会超过较小数的位数 十进制下 的五倍 拉梅于1844年证明了这点 同時這也標誌著计算复杂性理论的開端 目录 1 背景 1 1 最大公约数 1 2 归纳 递归和无穷递降 2 算法描述 2 1 计算过程 2 2 正确性的证明 2 3 举例 2 4 图形演示 2 5 计算商和余数 2 6 计算机实现 2 7 使用绝对值最小的余数 3 历史发展 4 数学上的应用 4 1 贝祖等式 4 2 主理想和相关问题 4 3 扩展欧几里得算法 4 4 矩阵法 4 5 欧几里得引理和唯一分解 4 6 线性丢番图方程 4 7 乘法逆和RSA算法 4 8 中国剩余定理 4 9 连分数 4 10 整数分解算法 5 算法效率 5 1 计算步数 5 1 1 最差情况 5 1 2 平均情况 5 2 每一步的计算开销 5 3 其他算法的效率 6 其他数系 6 1 有理数和实数 6 2 多项式 6 3 高斯整数 6 4 欧几里得整环 6 4 1 二次整数的惟一分解 6 5 非交换环 7 推广至其他数学结构 8 参考文献 8 1 引用 8 2 来源 9 外部链接背景 编辑最大公约数 编辑 欧几里得的辗转相除法计算的是两个自然数a displaystyle a nbsp 和b displaystyle b nbsp 的最大公约数g displaystyle g nbsp 意思是能够同时整除a displaystyle a nbsp 和b displaystyle b nbsp 的自然数中最大的一个 两个数的最大公约数通常写成gcd a b displaystyle gcd a b nbsp 或者简写成 a b displaystyle a b nbsp 2 但是第二种写法也被使用在其他数学概念 如二维向量的坐标 如果gcd a b 1 displaystyle gcd a b 1 nbsp 則稱a displaystyle a nbsp 和b displaystyle b nbsp 互素 3 a和b是否互素和它们是否素数无关 4 如 6和35都不是素数 因为它们都可以分解为多于一个素因数的乘积 6 2 3 35 5 7 但是 6和35互素 因为除了1以外没有自然数同时整除6和35 nbsp 一个24 60的长方形正好被十个12 12的方格填满 其中12是24和60的最大公约数 一般地 当且仅当c displaystyle c nbsp 是a displaystyle a nbsp 和b displaystyle b nbsp 的公约数时 a b displaystyle a times b nbsp 尺寸的长方形可被边长c的正方形正好填满 令g gcd a b displaystyle g gcd a b nbsp 由于a displaystyle a nbsp 和b displaystyle b nbsp 都是g displaystyle g nbsp 的整数倍 所以可以写成a m g b n g displaystyle a mg b ng nbsp 并且不存在更大的整数G gt g displaystyle G gt g nbsp 使等式成立 为了使g displaystyle g nbsp 尽可能大 就要使a displaystyle a nbsp 和b displaystyle b nbsp 中所有公约数都提取出来归入g displaystyle g nbsp 中 所以自然数m displaystyle m nbsp 和n displaystyle n nbsp 一定互素 并且a displaystyle a nbsp 和b displaystyle b nbsp 的最大公约数g displaystyle g nbsp 可以被a displaystyle a nbsp 和b displaystyle b nbsp 的所有其他公因数c displaystyle c nbsp 整除 5 我们可以用右图来解释最大公约数的概念 6 設一个长方形的边长为a displaystyle a nbsp 和b displaystyle b nbsp 因为a displaystyle a nbsp 和b displaystyle b nbsp 的任何公约数c displaystyle c nbsp 都可以整除a displaystyle a nbsp 和b displaystyle b nbsp 所以长方形的边都可以等分为长度为c displaystyle c nbsp 的线段 也就是长方形可以被边长为c displaystyle c nbsp 的正方形正好填满 而最大公约数g displaystyle g nbsp 是所有可能的c displaystyle c nbsp 中最大的一个 例如 一个24 60的长方形区域可以分成1 1 2 2 3 3 6 6或12 12的正方形网格 也就是说 12是24和60的最大公约数 a displaystyle a nbsp 和b displaystyle b nbsp 的最大公约数是两数共有的素因数的乘积 7 例如 462可以分解成2 3 7 11 1071可以分解成3 3 7 17 462和1071的最大公约数等于它们共有的素因数的乘积3 7 21 如果两数没有公共的素因数 那么它们的最大公约数是1 也即这两个数互素 辗转相除法的优点就在於它能以有系統的方式求出兩數的最大公约数 而無需分別對它們作因式分解 8 9 大数的素因数分解被認為是一個困難的問題 即使是现代的计算机也非常难於處理 所以许多加密系统的原理都是建基於此 10 在数学中 尤其是抽象代数的环论中 最大公约数有一个更加巧妙的定义 11 a displaystyle a nbsp 和b displaystyle b nbsp 的最大公约数g displaystyle g nbsp 是 11 a displaystyle a nbsp 和b displaystyle b nbsp 的线性和中的最小正整數 即所有形如u a v b displaystyle ua vb nbsp 其中u displaystyle u nbsp 和v displaystyle v nbsp 是整数 的数中的最小正整数 可以證明 所有u a v b displaystyle ua vb nbsp 都是g displaystyle g nbsp 的整数倍 u a v b m g displaystyle ua vb mg nbsp 其中m displaystyle m nbsp 是整数 用现代数学语言來說 a displaystyle a nbsp 和b displaystyle b nbsp 生成的理想即是由g displaystyle g nbsp 生成的主理想 最大公约数的这个定义和其他定义的等价性将在下面描述 三个数的最大公约数的定义和两个数的相同 即是它们共有的素因数的积 12 它们或者也可以按下式计算 13 gcd a b c gcd a gcd b c gcd gcd a b c gcd gcd a c b displaystyle gcd a b c gcd a gcd b c gcd gcd a b c gcd gcd a c b nbsp 所以 欧几里得的辗转相除法实际可以计算任意多整数的最大公约数 归纳 递归和无穷递降 编辑 下文的論證會用到三種相關的数学方法 分別是数学归纳法 递归和无穷递降 数学归纳法 14 经常用来证明某個定理對所有自然数成立 15 首先证明定理对一个特定的数n 0 displaystyle n 0 nbsp 成立 通常是1 然后證明如果定理对自然数n displaystyle n nbsp 成立的話 那麼它对自然数n 1 displaystyle n 1 nbsp 成立 這樣 便可證明定理对所有大于n 0 displaystyle n 0 nbsp 的自然数也成立 递归 16 是将相关的数组成一个数列 a 1 a 2 a 3 displaystyle a 1 a 2 a 3 cdots nbsp 17 當中除初始項外 其中每一项都用前一项或前几项表示 如斐波那契数列就是递归的 每一项F n displaystyle F n nbsp 都等于F n 1 F n 2 displaystyle F n 1 F n 2 nbsp n 2 displaystyle n geqq 2 nbsp 辗转相除法中的一些等式也是递归的 最后 无穷递降 18 是用方程的一个自然数解导出比它小的自然数解 19 但是 这种转化不能永远进行下去 因为只有有限個小於原來的自然数解的自然数 所以 要麼方程無解 不然在有限步内必然能得出最小的自然數解 在下文會用到此法來证明辗转相除法一定会在有限步内结束 算法描述 编辑计算过程 编辑 辗转相除法是一种递归算法 每一步计算的输出值就是下一步计算时的输入值 20 设k displaystyle k nbsp 表示步骤数 从0开始计数 算法的计算过程如下 每一步的输入是都是前两次计算的非負余数r k 1 displaystyle r k 1 nbsp 和r k 2 displaystyle r k 2 nbsp 因为每一步计算出的余数都在不断减小 所以 r k 1 displaystyle r k 1 nbsp 小于r k 2 displaystyle r k 2 nbsp 在第k displaystyle k nbsp 步中 算法计算出满足以下等式的商q k displaystyle q k nbsp 和余数r k displaystyle r k nbsp r k 2 q k r k 1 r k displaystyle r k 2 q k r k 1 r k nbsp 其中0 r k lt r k 1 displaystyle 0 leq r k lt r k 1 nbsp 也就是r k 2 displaystyle r k 2 nbsp 要不断减去r k 1 displaystyle r k 1 nbsp 直到比r k 1 displaystyle r k 1 nbsp 小 為求簡明 以下只說明如何求兩個非負整數a displaystyle a nbsp 和b displaystyle b nbsp 的最大公約數 負數的情況是簡單的 在第一步计算时 k 0 displaystyle k 0 nbsp 设r 2 displaystyle r 2 nbsp 和r 1 displaystyle r 1 nbsp 分别等于a displaystyle a nbsp 和b displaystyle b nbsp 第2步 此时k 1 displaystyle k 1 nbsp 时计算r 1 displaystyle r 1 nbsp 即b displaystyle b nbsp 和r 0 displaystyle r 0 nbsp 第一步计算产生的余数 相除产生的商和余数 以此类推 整个算法可以用如下等式表示 如果有a lt b displaystyle a lt b nbsp 算法的第一步實際上會把兩個數字交換 因為這時a displaystyle a nbsp 除以b displaystyle b nbsp 所得的商q 0 displaystyle q 0 nbsp 會等于0 余数r 0 displaystyle r 0 nbsp 則等于a displaystyle a nbsp 然後 算法的第二步便是把b displaystyle b nbsp 除以a displaystyle a nbsp 再計算所得之商和餘數 所以 對於k 0 displaystyle k geq 0 nbsp 總有r k lt r k 1 displaystyle r k lt r k 1 nbsp 即运算的每一步中得出的余数一定小于上一步计算的余数 由于每一步的余数都在减小并且不为负数 必然存在第n displaystyle n nbsp 步时r n displaystyle r n nbsp 等于0 使算法终止 21 r n 1 displaystyle r n 1 nbsp 就是a displaystyle a nbsp 和b displaystyle b nbsp 的最大公约数 其中n displaystyle n nbsp 不可能无穷大 因为在r 0 displaystyle r 0 nbsp 和0之间只有有限个自然数 正确性的证明 编辑 辗转相除法的正确性可以分成两步来证明 20 在第一步 我們會證明算法的最终结果r n 1 displaystyle r n 1 nbsp 同时整除a displaystyle a nbsp 和b displaystyle b nbsp 因为它是一个公约数 所以必然小于或者等于最大公约数g displaystyle g nbsp 在第二步 我們證明g displaystyle g nbsp 能整除r n 1 displaystyle r n 1 nbsp 所以g displaystyle g nbsp 一定小于或等于r n 1 displaystyle r n 1 nbsp 两个不等式只在r n 1 g displaystyle r n 1 g nbsp 时同时成立 具体证明如下 證明r n 1 displaystyle r n 1 nbsp 同時整除a displaystyle a nbsp 和b displaystyle b nbsp 因爲餘數r n displaystyle r n nbsp 是0 r n 1 displaystyle r n 1 nbsp 能夠整除r n 2 displaystyle r n 2 nbsp r n 2 q n r n 1 r n displaystyle r n 2 q n r n 1 r n nbsp dd 因爲r n 1 displaystyle r n 1 nbsp 能夠整除r n 2 displaystyle r n 2 nbsp 所以也能夠整除r n 3 displaystyle r n 3 nbsp r n 3 q n 1 r n 2 r n 1 displaystyle r n 3 q n 1 r n 2 r n 1 nbsp dd 同理可證r n 1 displaystyle r n 1 nbsp 可以整除所有之前步驟的餘數 包括a displaystyle a nbsp 和b displaystyle b nbsp 即r n 1 displaystyle r n 1 nbsp 是a displaystyle a nbsp 和b displaystyle b nbsp 的公約數 r n 1 g displaystyle r n 1 leq g nbsp 證明最大公約數g displaystyle g nbsp 能整除r n 1 displaystyle r n 1 nbsp 根據定義 a displaystyle a nbsp 和b displaystyle b nbsp 可以寫成g displaystyle g nbsp 的倍數 a m g displaystyle a mg nbsp b n g displaystyle b ng nbsp 其中m displaystyle m nbsp 和n displaystyle n nbsp 是自然數 因爲r 0 a q 0 b m g q 0 n g m q 0 n g displaystyle r 0 a q 0 b mg q 0 ng m q 0 n g nbsp 所以g displaystyle g nbsp 整除r 0 displaystyle r 0 nbsp 同理可證g displaystyle g nbsp 整除每個餘數r 1 r 2 r n 1 displaystyle r 1 r 2 ldots r n 1 nbsp 因爲最大公約數g displaystyle g nbsp 整除r n 1 displaystyle r n 1 nbsp 因而g r n 1 displaystyle g leq r n 1 nbsp 所以g r n 1 displaystyle g r n 1 nbsp 即 22 23 g gcd a b gcd b r 0 gcd r 0 r 1 gcd r n 2 r n 1 r n 1 displaystyle g gcd a b gcd b r 0 gcd r 0 r 1 ldots gcd r n 2 r n 1 r n 1 nbsp 举例 编辑 nbsp 算法的演示动画 最初的绿色矩形的长和宽分别是a 1071 displaystyle a 1071 nbsp b 462 displaystyle b 462 nbsp 从中不断铺上462 462的正方形直到剩下部分面积是462 147 然后再铺上147 147的正方形直至剩下21 147的面积 最后 铺上21 21的正方形时 绿色部分就没有了 即21是1071和462的最大公约数 例如 计算a 1071 displaystyle a 1071 nbsp 和b 462 displaystyle b 462 nbsp 的最大公约数的过程如下 从1071中不断减去462直到小于462 可以减2次 即商q 0 2 displaystyle q 0 2 nbsp 余数是147 1071 2 462 147 displaystyle 1071 2 times 462 147 nbsp 然后从462中不断减去147直到小于147 可以减3次 即q 1 3 displaystyle q 1 3 nbsp 余数是21 462 3 147 21 displaystyle 462 3 times 147 21 nbsp 再从147中不断减去21直到小于21 可以减7次 即q 2 7 displaystyle q 2 7 nbsp 没有余数 147 7 21 0 displaystyle 147 7 times 21 0 nbsp 此时 余数是0 所以1071和462的最大公约数是21 这和用素因数分解得出的结果相同 见上文 用表格表示如下 步骤数 算式 商和余数 0 1071 462 q 0 r 0 displaystyle 1071 462q 0 r 0 nbsp q 0 2 displaystyle q 0 2 nbsp r 0 147 displaystyle r 0 147 nbsp 1 462 147 q 1 r 1 displaystyle 462 147q 1 r 1 nbsp q 1 3 displaystyle q 1 3 nbsp r 1 21 displaystyle r 1 21 nbsp 2 147 21 q 2 r 2 displaystyle 147 21q 2 r 2 nbsp q 2 7 displaystyle q 2 7 nbsp r 2 0 displaystyle r 2 0 nbsp 算法终止 图形演示 编辑 辗转相除法的计算过程可以用图形演示 24 假设我们要在a b displaystyle a times b nbsp 的矩形地面上铺正方形瓷砖 并且正好铺满 其中a displaystyle a nbsp 大于b displaystyle b nbsp 我们先尝试用b b displaystyle b times b nbsp 的瓷砖 但是留下了r 0 b displaystyle r 0 times b nbsp 的部分 其中r 0 lt b displaystyle r 0 lt b nbsp 我们接着尝试用r 0 r 0 displaystyle r 0 times r 0 nbsp 的正方形瓷砖铺 又留下了r 1 r 0 displaystyle r 1 times r 0 nbsp 的部分 然后再使用r 1 r 1 displaystyle r 1 times r 1 nbsp 的正方形铺 直到全部铺满为止 即到某步时正方形刚好覆盖剩余的面积为止 此时用到的最小的正方形的边长就是原来矩形的两条边长的最大公约数 在图中 最小的正方形面积是21 21 红色 而原先的矩形 绿色 边长是1071 462 所以21是1071和462的最大公约数 计算商和余数 编辑 参见 模除和带余除法 在每个步骤k displaystyle k nbsp 中 辗转相除法都需要计算两个数r k 1 displaystyle r k 1 nbsp 和r k 2 displaystyle r k 2 nbsp 的商q k displaystyle q k nbsp 和余数r k displaystyle r k nbsp r k 2 q k r k 1 r k displaystyle r k 2 q k r k 1 r k nbsp 其中0 r k lt r k 1 displaystyle 0 leq r k lt r k 1 nbsp 除法的算法保证这样的商和余数总是存在 自然数的除法算法还指出这样的商和余数是惟一的 但这对辗转相除法而言并非必要 25 在欧几里得最初的描述中 商和余数是通过连续的减法来计算的 即从r k 2 displaystyle r k 2 nbsp 中不断减去r k 1 displaystyle r k 1 nbsp 直到小于r k 1 displaystyle r k 1 nbsp 一個更高效的做法是使用整數除法和模除来计算商和余数 r k r k 2 mod r k 1 displaystyle r k equiv r k 2 bmod r k 1 nbsp 计算机实现 编辑 辗转相除法可用伪代码表示 比如除法版本可以寫成 26 function gcd a b while b 0 t b b a mod b a t return aC 版本 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 gt Option lt isize gt match x y 0 0 gt None a 0 gt Some a abs mut a mut b gt 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 在第k displaystyle k nbsp 次循环开始时 变量b displaystyle b nbsp 的值是前一次运算的余数r k 1 displaystyle r k 1 nbsp 变量a displaystyle a nbsp 的值是再前一次运算的余数r k 2 displaystyle r k 2 nbsp 步骤b a mod b displaystyle b a bmod b nbsp 的作用等同于递归式r k r k 2 mod r k 1 displaystyle r k equiv r k 2 bmod r k 1 nbsp 变量t displaystyle t nbsp 的功能是在下一个余数r k displaystyle r k nbsp 计算过程中临时性地保存r k 1 displaystyle r k 1 nbsp 的值 在一次循环结束时 变量b displaystyle b nbsp 的值是前一次运算的余数r k displaystyle r k nbsp 变量a displaystyle a nbsp 的值是再前一次运算的余数r k 1 displaystyle r k 1 nbsp 在欧几里得定义的减法版本 取餘运算被减法替换 27 function gcd a b if a 0 return b while b 0 if a gt b a a b else b b a return a 变量a displaystyle a nbsp 和b displaystyle b nbsp 的值分别是前两次的余数r k 1 displaystyle r k 1 nbsp 和r k 2 displaystyle r k 2 nbsp 假定第k displaystyle k nbsp 次循环开始时a displaystyle a nbsp 大于b displaystyle b nbsp 那么a displaystyle a nbsp 等于r k 2 displaystyle r k 2 nbsp 因为r k 2 gt r k 1 displaystyle r k 2 gt r k 1 nbsp 在循环过程中 a displaystyle a nbsp 重复减去b displaystyle b nbsp 直到比b displaystyle b nbsp 小 此时a displaystyle a nbsp 就是下一个余数r k displaystyle r k nbsp 然后b displaystyle b nbsp 重复减去a displaystyle a nbsp 直到比a displaystyle a nbsp 小 此时b displaystyle b nbsp 就是下一个余数r k 1 displaystyle r k 1 nbsp 重复执行直到b 0 displaystyle b 0 nbsp 以下是递归版本 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 gt Option lt isize gt match x y 0 0 gt None a 0 gt Some a abs gt 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 例如gcd 1071 462 displaystyle gcd 1071 462 nbsp 的计算过程是 函数的第一次调用计算gcd 462 1071 mod 4 62 gcd 462 147 displaystyle gcd 462 1071 bmod 4 62 gcd 462 147 nbsp 下一次调用计算gcd 147 462 mod 1 47 gcd 147 21 displaystyle gcd 147 462 bmod 1 47 gcd 147 21 nbsp 在接下来是gcd 21 147 mod 2 1 gcd 21 0 21 displaystyle gcd 21 147 bmod 2 1 gcd 21 0 21 nbsp 使用绝对值最小的余数 编辑 在另一个版本的算法中 每一步还要把取余运算时计算出的商增加一后再重新计算余数 此时计算出的余数应该是负的 然后取两个余数的绝对值较小的数作为下一步运算时使用的余数 29 30 取余运算后 设r k displaystyle r k nbsp 是计算出的余数 此時為正 q displaystyle q nbsp 是计算出的商 r k 2 q k r k 1 r k displaystyle r k 2 q k r k 1 r k nbsp 即假設r k 1 gt r k gt 0 displaystyle r k 1 gt r k gt 0 nbsp 然後使用以下式子计算出一个负的余数e k displaystyle e k nbsp r k 2 q k 1 r k 1 e k displaystyle r k 2 q k 1 r k 1 e k nbsp 如果 e k lt r k displaystyle e k lt r k nbsp 那么用e k displaystyle e k nbsp 替换r k displaystyle r k nbsp 进行下一次运算 如利奥波德 克罗内克所指出的 这个版本需要的运算步骤是欧几里得算法的所有版本中最少的 29 30 历史发展 编辑 nbsp 辗转相除法可能在欧几里得之前几个世纪就已经有了 图为使用两脚规进行测量 辗转相除法是目前仍然在使用的历史最悠久的算法之一 31 它首次出现于 几何原本 卷7命题1 2 卷10命题2 3 大约公元前300年 在卷7中用于整数 在卷10中用于线段的长度 以現代的觀點看 线段的长度可視為正实数 也就是說辗转相除法實際可用於實數上 但是当时未有实数的概念 卷10中出现的算法是几何的 两段线段a和b的最大公约数是a和b的公度中的最大值 这个算法可能并非欧几里得发明 因為他也有将先前其他數學家的一些成果编进他的 几何原本 32 33 数学家 历史学家范德瓦尔登认为卷7的内容可能来自毕达哥拉斯学院出身的数学家写的关于数论的教科书 34 辗转相除法在當時很可能已為尤得塞斯 大約公元前375年 所知 31 35 甚至可能更早之前就已经存在 36 37 因为欧几里得和亚里士多德的著作中都出现了ἀn8yfairesis 一词 意为 辗转相减 38 几个世纪之后 辗转相除法又分别被中国人和印度人独立发现 39 主要用来解天文学中用到的丢番图方程以及制定准确的历法 5世纪末 印度数学家 天文学家阿里亚哈塔曾稱辗转相除法为 粉碎机 這可能是因为它在解丢番图方程时很有效 40 41 在中国 九章算术 中提到了一种类似辗转相减法的 更相减损术 42 孙子算经 中則出现了中国剩余定理的一个特例 43 但是直到1247年秦九韶才於其 数学九章 中解答了該定理的一般情況 當中用到了他發明的大衍求一术 此法的其中一部分實際上便是輾轉相除的原理 秦九韶在書中對此有明確表述 44 在欧洲 辗转相除法首次出现于克劳德 巴希特 英语 Claude Gaspard Bachet de Meziriac 的著作 愉悦讨喜的问题 Problemes plaisants et delectables 的第二版 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 Lovasz lattice basis reduction algorithm HJLS算法以及PSLQ算法 52 53 1969年 科尔 Cole 和戴维 Davie 基于辗转相除法创造了一种二人游戏 叫做 欧几里得游戏 54 这个游戏有最优策略 55 游戏开始于两列分别为a和b个棋子组成的序列 玩家轮流从较长一列中取走较短一列棋子数量的m倍的棋子 如果两列棋子p和q分别由x和y个棋子组成 其中x大于y 那么玩家可以將序列p的棋子数量减少为自然数x my 最后率先将一列棋子清空的玩家胜出 56 57 数学上的应用 编辑贝祖等式 编辑 贝祖等式说明 两个数a displaystyle a nbsp 和b displaystyle b nbsp 的最大公约数g displaystyle g nbsp 可以表示为a displaystyle a nbsp 和b displaystyle b nbsp 的线性和 58 也就是说 存在整数s displaystyle s nbsp 和t displaystyle t nbsp 使g s a t b displaystyle g sa tb nbsp 59 60 整数s displaystyle s nbsp 和t displaystyle t nbsp 可以从辗转相除法算出的商q 0 q 1 displaystyle q 0 q 1 cdots nbsp 计算出 61 从辗转相除法的最后一步开始 g displaystyle g nbsp 可以表示成前一步的商q N 1 displaystyle q N 1 nbsp 和前两步的余数r N 2 displaystyle r N 2 nbsp 和r N 3 displaystyle r N 3 nbsp g r N 1 r N 3 q N 1 r N 2 displaystyle g r N 1 r N 3 q N 1 r N 2 nbsp 而前两步的余数又分别可以表示成它们前两步的余数和商 r N 2 r N 4 q N 2 r N 3 displaystyle r N 2 r N 4 q N 2 r N 3 nbsp r N 3 r N 5 q N 3 r N 4 displaystyle r N 3 r N 5 q N 3 r N 4 nbsp 将这两行式子先後代入第一个式子 可以将g displaystyle g nbsp 表示成r N 4 displaystyle r N 4 nbsp 和r N 5 displaystyle r N 5 nbsp 的线性和 重复进行迭代直到出现a displaystyle a nbsp 和b displaystyle b nbsp r 2 r 0 q 2 r 1 displaystyle r 2 r 0 q 2 r 1 nbsp r 1 b q 1 r 0 displaystyle r 1 b q 1 r 0 nbsp r 0 a q 0 b displaystyle r 0 a q 0 b nbsp 最终 g可以表示成a displaystyle a nbsp 和b displaystyle b nbsp 的线性和 g s a t b displaystyle g sa tb nbsp 贝祖等式以及以上证明都可以扩展至欧几里得整环 主理想和相关问题 编辑 贝祖等式提供了另一种定义a displaystyle a nbsp 和b displaystyle b nbsp 的最大公约数g displaystyle g nbsp 的方法 11 考虑形如u a v b displaystyle ua vb nbsp 其中u displaystyle u nbsp 和v displaystyle v nbsp 是整数 的数的集合 因为a displaystyle a nbsp 和b displaystyle b nbsp 都可以被g displaystyle g nbsp 整除 所以这个集合中的所有元素都可以被g displaystyle g nbsp 整除 也就是说这个集合中的数都可以表示成g displaystyle g nbsp 的倍数 或者a displaystyle a nbsp 和b displaystyle b nbsp 的其他公约数的倍数 但是 只有最大公约数才是这个集合的元素 根据贝祖等式 有g s a t b displaystyle g sa tb nbsp 換言之 当u s displaystyle u s nbsp v t displaystyle v t nbsp 时得出g displaystyle g nbsp 任何其他的公约数都不是这个集合的元素 因为它们都不能被比它们大的g displaystyle g nbsp 整除 相反地 g displaystyle g nbsp 的任何倍数都属于这个集合 只要令u m s displaystyle u ms nbsp v m t displaystyle v mt nbsp 便有 m g m s a m t b displaystyle mg msa mtb nbsp 所以 形如u a v b displaystyle ua vb nbsp 的数的集合等于g displaystyle g nbsp 的整数倍的集合 也就是说 任意两个数的线性和的集合等同于它们最大公约数的整数倍的集合 a displaystyle a nbsp 和b displaystyle b nbsp 的最大公约数叫做a displaystyle a nbsp 和b displaystyle b nbsp 的理想的生成元素 这个最大公约数的定义导出了兩個现代抽象代数的概念 主理想 由单个元素生成的理想 以及主理想整环 其每一理想都是主理想的整环 这个结果可以解决某些實際问题 62 例如 考虑两个容积分别为a displaystyle a nbsp 和b displaystyle b nbsp 的量杯 其中a displaystyle a nbsp 和b displaystyle b nbsp 為正整數 通过加入或倒去u displaystyle u nbsp 倍第一个量杯的体积以及v displaystyle v nbsp 倍第二个量杯的体积的液体 任何体积为u a v b displaystyle ua vb nbsp 的液体都可以被量出 只要u a v b displaystyle ua vb nbsp 為正數 根據贝祖等式 凡是可以被量出的液体 其体积一定是a displaystyle a nbsp 和b displaystyle b nbsp 的最大公约数g displaystyle g nbsp 的倍數 扩展欧几里得算法 编辑 主条目 扩展欧几里得算法 贝祖等式的整数s和t可以通过扩展欧几里得算法算出 这个扩展算法在原有辗转相除法的基础上增加了两个递归等式 63 s k s k 2 q k s k 1 displaystyle s k s k 2 q k s k 1 nbsp t k t k 2 q k t k 1 displaystyle t k t k 2 q k t k 1 nbsp 算法开始时 s 2 1 displaystyle s 2 1 nbsp t 2 0 displaystyle t 2 0 nbsp s 1 0 displaystyle s 1 0 nbsp t 1 1 displaystyle t 1 1 nbsp 加上这兩个递归式后 当算法终止于r N 0 displaystyle r N 0 nbsp 贝祖等式的整数s displaystyle s nbsp 和t displaystyle t nbsp 分别由s N displaystyle s N nbsp 和t N displaystyle t N nbsp 给出 这个算法的正确性可以用数学归纳法来证明 假设递归至第k 1 displaystyle k 1 nbsp 步是正确的 也就是假设 r j s j a t j b displaystyle r j s j a t j b nbsp 在j displaystyle j nbsp 小于k displaystyle k nbsp 時皆成立 则第k displaystyle k nbsp 步运算得出以下等式 r k r k 2 q k r k 1 displaystyle r k r k 2 q k r k 1 nbsp 因为r k 2 displaystyle r k 2 nbsp 和r k 1 displaystyle r k 1 nbsp 被假定是正确的 所以可以用s displaystyle s nbsp 和t displaystyle t nbsp 表示 r k s k 2 a t k 2 b q k s k 1 a t k 1 b displaystyle r k s k 2 a t k 2 b q k s k 1 a t k 1 b nbsp 整理后得到第k displaystyle k nbsp 步的结果 和我们期望得到的结果一致 r k s k a t k b s k 2 q k s k 1 a t k 2 q k t k 1 b displaystyle r k s k a t k b s k 2 q k s k 1 a t k 2 q k t k 1 b nbsp 矩阵法 编辑 整数s displaystyle s nbsp 和t displaystyle t nbsp 也可以用矩阵运算得出 64 辗转相除法的计算过程 a q 0 b r 0 displaystyle a q 0 b r 0 nbsp b q 1 r 0 r 1 displaystyle b q 1 r 0 r 1 nbsp r N 2 q N r N 1 0 displaystyle r N 2 q N r N 1 0 nbsp 可以写作2 2的商矩阵乘以一个2维余数向量 a b q 0 1 1 0 b r 0 q 0 1 1 0 q 1 1 1 0 r 0 r 1 i 0 N q i 1 1 0 r N 1 0 displaystyle begin pmatrix a b end pmatrix begin pmatrix q 0 amp 1 1 amp 0 end pmatrix begin pmatrix b r 0 end pmatrix begin pmatrix q 0 amp 1 1 amp 0 end pmatrix begin pmatrix q 1 amp 1 1 amp 0 end pmatrix begin pmatrix r 0 r 1 end pmatrix cdots prod i 0 N begin pmatrix q i amp 1 1 amp 0 end pmatrix begin pmatrix r N 1 0 end pmatrix nbsp 令M displaystyle mathbf M nbsp 表示所有商矩阵的乘积 M m 11 m 12 m 21 m 22 i 0 N q i 1 1 0 q 0 1 1 0 q 1 1 1 0 q N 1 1 0 displaystyle mathbf M begin pmatrix m 11 amp m 12 m 21 amp m 22 end pmatrix prod i 0 N begin pmatrix q i amp 1 1 amp 0 end pmatrix begin pmatrix q 0 amp 1 1 amp 0 end pmatrix begin pmatrix q 1 amp 1 1 amp 0 end pmatrix cdots begin pmatrix q N amp 1 1 amp 0 end pmatrix nbsp 这使辗转相除法化简为 a b M r N 1 0 M g 0 displaystyle begin pmatrix a b end pmatrix mathbf M begin pmatrix r N 1 0 end pmatrix mathbf M begin pmatrix g 0 end pmatrix nbsp 如要用a displaystyle a nbsp 和b displaystyle b nbsp 的线性和表示g displaystyle g nbsp 可將等式两边同时乘以矩阵M displaystyle mathbf M nbsp 的逆矩阵 64 65 M displaystyle mathbf M nbsp 的行列式等于 1 N 1 displaystyle 1 N 1 nbsp 因为它等于商矩阵的行列式的乘积 而每一个的行列式都是 1 因为M displaystyle mathbf M nbsp 的行列式不为零 最终的余数向量可以利用M displaystyle mathbf M nbsp 的逆矩阵解出 g 0 M 1 a b 1 N 1 m 22 m 12 m 21 m 11 a b displaystyle begin pmatrix g 0 end pmatrix mathbf M 1 begin pmatrix a b end pmatrix 1 N 1 begin pmatrix m 22 amp m 12 m 21 amp m 11 end pmatrix begin pmatrix a b end pmatrix nbsp 由上式可以得出g 1 N 1 m 22 a m 12 b displaystyle g 1 N 1 m 22 a m 12 b nbsp 贝祖等式中的两个整数分别是s 1 N 1 m 22 displaystyle s 1 N 1 m 22 nbsp t 1 N m 12 displaystyle t 1 N m 12 nbsp 矩阵法的效率可前文描述的辗转相除法的递归算法是相同的 每一步都有两次乘法和两次加法 欧几里得引理和唯一分解 编辑 贝祖等式对辗转相除法的很多应用都很重要 如证明自然数的唯一分解性质 66 假设数字L可以写成两个因数u displaystyle u nbsp 和v displaystyle v nbsp 的乘积 即L u v displaystyle L uv nbsp 如果另一个数w displaystyle w nbsp 与u displaystyle u nbsp 互素的数也能整除L displaystyle L nbsp 那么w displaystyle w nbsp 必须整除v displaystyle v nbsp 证明如下 如果u displaystyle u nbsp 和w displaystyle w nbsp 的最大公约数是1 则根据贝祖等式存在s displaystyle s nbsp 和t displaystyle t nbsp 使 1 s u t w displaystyle 1 su tw nbsp 两边都乘以v displaystyle v nbsp v s u v t w v s L t w v displaystyle v suv twv sL twv nbsp 因为w displaystyle w nbsp 整除等式右边 所以也应整除等式左边的v displaystyle v nbsp 这个结果叫做欧几里得引理 67 如果一个素数整除L displaystyle L nbsp 那么它至少整除L displaystyle L nbsp 的一个因数 如果一个数w displaystyle w nbsp 互素于数列a 1 a 2 a n displaystyle a 1 a 2 ldots a n nbsp 中的每一个数 则w也一定互素于它们的乘积a 1 a 2 a n displaystyle a 1 times a 2 times ldots times a n nbsp 67 欧几里得引理足以证明每一个自然数的素数分解是惟一的 68 我们用反证法来证明 假设L displaystyle L nbsp 可以分别分解成m displaystyle m nbsp 个素数和n displaystyle n nbsp 个素数 即 L p 1 p 2 p m q 1 q 2 q n displaystyle L p 1 p 2 cdots p m q 1 q 2 cdots q n nbsp 根据假设 每个素数p displaystyle p nbsp 都能整除L displaystyle L nbsp 因此它必须能够整除某個q displaystyle q nbsp 因为q displaystyle q nbsp 也是一个素数 所以p q displaystyle p q nbsp 同理 对于每一个p displaystyle p nbsp 都存在一个, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。