当前位置首页 > 百科资料> 正文

辗转相除

2022-07-09 18:12:00 百科资料

辗转相除,又名欧几里德算法(Euclidean algorithm),乃求两个正整数之最大公约数的算法。它是已知最古老的算法, 其可追溯至公元前300年。

  • 中文名称 辗转相除
  • 外文名称 Euclidean algorithm
  • 又名 欧几里德算法
  • 简介 求两个正整数之最大公约数的算法

简介

  它是已知最古老的算法, 其可追溯至公元前300年。它首次出现于欧几里德的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》。它并不需要把二数作质因子分解。

算法内容

  辗转相除法是利用以下性质来确定两个正整数 a 和 b 的最大公约数的:

  1. 若 r 是 a ÷ b 的余数, 则

  gcd(a,b) = gcd(b,r)

  2. a 和其倍数之最大公约数为 a。

  另一种写法是:

  1. a ÷ b,令r为所得余数(0≤r<b)

  若 r = 0,算法结束;b 即为答案。

  2. 互换:置 a←b,b←r,并返回第一步。

算法证明

  证明:

  已知m=qn+p,即m整除n的商为q,余数为p(其中,m≥n,n>p)。

  注意:使用(m,n)表示m和n的最大公约数;(n,p)表示n和p的最大公约数.用m|n表示m为n的因数。

  对于任意的m和n的公因数r,都有r|m和r|n。根据等式m=qn+p,可知r|p(因为等式可写成ra=rbn+p),则r为n和p的公因数。

  因此,所有m和n的公因数,都是n与p的公因数。

  同理可得,所有n与p的公因数,都是m与n的公因数。

  因此,(m,n)=(n,p),即m与n的最大公因数为n与m整除n后的余数q的最大公因数。

  则对于任意两个整数a,b(其中a>=b),其最大公因数为a整除b后的余数与b的最大公因数。

  得证。

代码

  计算机代码如下:

  其中"a mod b"是指取 a ÷ b 的余数

  。

  例如,123456 和 7890 的最大公因子是 6, 这可由下列步骤看出:

  a b a mod b

  123456 7890 5106

  7890 5106 2784

  5106 2784 2322

  2784 2322 462

  2322 462 12

  462 12 6

  12 6 0

  只要可计算余数都可用辗转相除法来求最大公约数。这包括多项式、复整数及所有欧几里德定义域(Euclidean domain)。

  C程序:

  辗转相除法的运算速度为 O(n),其中 n 为输入数值的位数。

声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:baisebaisebaise@yeah.net