欧几里得算法详解

目录

前言

  今天再看算法图解,在看到快速排序时,感觉这种排序方法非常巧妙,得知这种算法来源于欧几里得算法(又名辗转相除法),于是又复习一下欧几里得算法。如果直接想看详细证明的话可以忽略前面的话直接跳转到我的证明(详解)

欧几里得算法

  欧几里德算法又称辗转相除法,是指用于计算两个正整数a,b的最大公约数。
  计算公式:

gcd(a,b) = gcd(b,a mod b)

证明

网上的一般证明

  网上一般证明:

a可以表示成a = kb + r(a,b,k,r皆为正整数,且r< b),则r = a mod b
假设d是a,b的一个公约数,记作d|a,d|b,即a和b都可以被d整除。
而r = a - kb,两边同时除以d,r/d=a/d-kb/d=m,由等式右边可知m为整数,因此d|r.
因此d也是b,a mod b的公约数
因此(a,b)和(a,b,r)的公约数相同,其最大公约数也必然相等,得证。

  但是,但是看到这里的时候觉得很别扭,怎么就出来了公约数相等了呢?上述只是证明了对于任意一个属于(a,b)公约数的d同时也是(a,a mod b) b)的公约数,并不能说明两个的公约数集合相等。这么说吧,我们要证明集合A和集合B相等,必须证明对于集合A中的任意一个数,在集合B中都有一个与它相等的数,同时对于集合B中的任意一个数,在集合A中都有一个数与它相等。
而上述的证明过程只证明了对于集合A((a,b)公约数集合)中的任意一个数,在集合B((a,a mod b)公约数集合)中都有一个数与它相等。并没有下一步,也就是说它逻辑上是不能推断出(a,b)和(a,a mod b)公约数相同的,抱着这个疑惑,继续找资料,有一个大佬的解答很符合我的胃口。

一位大佬的证明

  大佬的证明:

a可以表示成a=kb+r(a,b,k,r皆为正整数;且a>b)
则r=a mod b
假设d是a,b的一个公约数,为了方便,我们记d=(a,b)
则d|a,d|b,即a和b都可以被d整除。
而r=a-kb
两边同时除以d得到
r/d=a/d-kb/d
因为d|a,d|b,显然可以得到d|r
所以d是r的一个约数,因此d是(a,b,r)的公约数,即d=(a,b,r)
设A是(a,b)的公约数集,B是(b,r)的公约数集,R是(a,r)的公约数集
那么可以得到A B,A R

假设d’是(b,r)的公约数,则d’|b,d’|r;a=kb+r,等式两边都除以d’,可得
a/d’=(kb+r)/d’=kb/d’+r/d’因为d’|b,d’|r;显然d’|a
所以如果d’=(b,r),那么在a=kb+r的情况下,d’也是a的约数,d’=(a,b,r)
因此(b,r)的约数集是(a,b)的约数集的一部分,也是(a,r)约数集的一部分所以Bsubseteq ,B R综上,A=B
由此得证,(a,b)的公约数与(b,r)的公约数相同,当然它们的最大公约数也必定相同。即
   gcd(a,b)=gcd(b,r)

我的证明(详解)

  我们在高中时学过假如要证明集合A=B那么,我们首先要证明A B,接着证明B A,然后我们才能说集合A=B
换到欧几里得算法:

gcd(a,b) = gcd(b,a mod b)

  欧几里得算法的意思是a,b两个整数的最大公约数等于b与a整除b的余数的最大公约数。
我们证明它是正确的一个思路是:证明它们的公约数集合是相等的,只要公约数集合相等,那它们的最大公约数也必然相等
  为了方便理解,我们令(a,b)的公约数集合为A,(b,r)的公约数集为B。
  也就是说第一步我们证明集合A B,第二部证明集合B A,第三步,得证。
  第一步,证明集合A B,再明白点就是:对于任意属于集合A的元素,在B中都有一个元素与它相等。

a可以表示为a=kb+r(k是一个大于0的整数,r是a整除b的余数)
也可以表示为r=a-kb    (1)
在集合A中任取一个数d。//集合A是(a,b)公约数的集合,集合B是(b,r)公约数的集合,任取一个(a,b)的公约数

那么(1)式全部除以d就变成
r/d=a/d-kb/d
因为d是(a,b)的公约数,所以a/d,b/d,kb/d是一个整数,也就是说r/d也是一个整数,因为一个大整数减去一个小整数,还是一个整数。
由此我们可以得知r也整除d
由此我们得知d是(b,r)的公约数,也就是说d属于B.
由此我们得知对于任意一个属于A的元素d,也必定属于B,也就是说A B.

第二步,证明集合B A,也就是说:对于任意属于集合B的元素,在A中都有一个元素与它相等。

a可以表示为a=kb+r(k是一个大于0的整数,r是a整除b的余数)   (2)
在集合B中任取一个数f。//集合A是(a,b)公约数的集合,集合B是(b,r)公约数的集合,任取一个(b,r)的公约数

那么(2)式全部除以f就变成
a/f=kb/f+r/f
因为f是(b,r)的公约数,所以kb/f,r/f是一个整数,也就是说a/f也是一个整数,因为一个整数加上一个整数,还是一个整数。
由此我们可以得知a也整除f
由此我们得知f是(a,b)的公约数,也就是说f属于A.
由此我们得知对于任意一个属于B的元素f,也必定属于A,也就是说B A.

第三步,结论

因为A B,并且合B A,所以我们说集合A=B.
因为(a,b)的公约数集合A和(b,r)的公约数集合B相等,所以我们说他们的最大公约数也必然相等,也就是说:
   gcd(a,b)=gcd(b,r)

参考资料

  欧几里德算法的证明

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章