辗转相除法求最大公约数的原理是什么


原理如下: 假设有两个数x和y,存在一个最大公约数z=(x,y),即x和y都有公因数z, 那么x一定能被z整除,y也一定能被z整除,所以x和y的线性组合mx±ny也一定能被z整除。(m和n可取任意整数) 对于辗转相除法来说,思路就是:若x>y,设x/y=n余c,则x能表示成x=ny+c的形式,将ny移到左边就是x-ny=c,由于一般形式的mx±ny能被z整除,所以等号左边的x-ny(作为mx±ny的一个特例)就能被z整除,即x除y的余数c也能被z整除。 由以上的推理可知 a / b的余数 也能被 (a,b)的最大公约数整除,因此就将问题转化为求 其中较小的数和余数的最大公约数,最终将范围不断减小,从而求出答案。

设两数为a、b(b<a),用gcd(a,b)表示a,b的最大公约数,r=a(modb)为a除以b以后的余数,k为a除以b的商,即a÷b=kr。辗转相除法即是要证明gcd(a,b)=gcd(b,r)。

第一步:令c=gcd(a,b),则设a=mc,b=nc

第二步:根据前提可知r=a-kb=mc-knc=(m-kn)c

第三步:根据第二步结果可知c也是r的因数

第四步:可以断定m-kn与n互质否则,可设m-kn=xd,n=yd(d>1),则m=kn+xd=kyd+xd=(ky+x)d,则a=mc=(ky+x)dc,b=nc=ycd,故a与b最大公约数成为cd,而非c,与前面结论矛盾

从而可知gcd(b,r)=c,继而gcd(a,b)=gcd(b,r)。

证毕。

以上步骤的操作是建立在刚开始时r!=0的基础之上的。即m与n亦互质。

辗转相除法,乃求两个正整数之最大公因子的算法它是已知最古老的算法,其可追溯至3000年前两个整数的最大公约数是能够同时整除它们的最大的正整数辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和

在几乎大多数程序设计语言中,都讲过一个求两个整数的最大公约数的方法,叫做辗转相除法。很多人都会写这个程序,却不了解为什么。我给解释一下。

辗转相除法,是由欧几里德算法而来。其基本原理如下:

如果要求两个正整数a和b(假设a>b,其实这并不影响求解算法)的最大公约数,可以表示成下面的式子:

a=b×q+r (1)

其中,q表示a除以b所得的商,r表示余数。

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

因为在(1)式中,可以看出,如果一个数能够同时整除a和b,则必能同时整除b和r;而能够同时整除b和r的数也必能同时整除a和b。即a和b的公约数与b和r的公约数是相同的,其最大公约数也是相同的。

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

证明:

设两数为a、b(b<a),求它们最大公约数(a、b)的步骤如下:用b除a,得a=bq�1+r�1(0≤r�1<b)。若r�1=0,则 (a,b)=b;若r�1≠0,则再用r�1除b,得b=r�1q�2+r�2(0≤r�2<r�1)。若r�2=0,则(a,b)=r�1,若 r�2≠0,则继续用r�2除r�1,……如此下去,直到能整除为止。其最后一个非零余数即为(a,b)。

[编辑] 算法

辗转相除法是利用以下性质来确定两个正整数 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,并返回第一步。

[编辑] 虚拟码

这个算法可以用递归写成如下:

function gcd(a, b) {

if a mod b<>0

return gcd(b, a mod b);

else

return a;

}

或纯使用循环:

function gcd(a, b) {

define r as integer;

while b ≠ 0 {

r := a mod b;

a := b;

b := r;

}

return a;

}

其中“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)。

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

辗转相除法又叫欧几里得辗转相除法,最早出现在公元前300年古希腊著名数学家欧几里得的《几何原本》》(第VII卷,命题i和ii)中。而在中国则可以追溯至东汉出现的《九章算术》。而在现代数学中,这应该是属于数论的部分的。

要想解释辗转相除法的原理,需要先知道以下两点:

一、一个一般定理:

如果a是任一整数而b是任一大于零的整数,则我们总能找到一整数q,使

a=bq+r

这里r是满足不等式0<=r<b的一个整数。

二、最大公因子的表示方法:

如果整数a和b的最大公因子是d,则表示为d=(a,b) (不知道现在教科书上是怎么表示的)

给定a和b(a>=b)两个整数,求最大公因子d。

根据上边给的定理,可以将a写成

a=bq+r

辗转相除法是告诉我们

(a,b)=(b,r)

即a和b的最大公因数和b和r(r是a除以b的余数)的最大公因数是相等的。

原理:因为对任意同时整除a和b的数u,有

a=su,b=tu,

它也能整除r,因为r=a-bq=su-qtu=(s-qt)u。

反过来每一个整除b和r的整数v,有

b=s'v , r=t'v

它也能整除a,因为a=bq+r=s'vq+t'v=(s'q+t')v

因此a和b的每一个公因子同时也是b和r的一个公因子,反之亦然。这样由于a和b的全体公因子集合与b和r的全体公因子集合相同,所以a和b的最大公因子必须等于b和r的最大公因子,这就证明了上边的等式。即(a,b)=(b,r)。

以上就是关于辗转相除法求最大公约数的原理是什么全部的内容,包括:辗转相除法求最大公约数的原理是什么、辗转相除法求两数的最大公约数的原理是什么、辗转相除法是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

转载请注明原文地址:https://juke.outofmemory.cn/read/3844533.html

最新回复(0)