歐幾里得算法詳解

目錄

前言

  今天再看算法圖解,在看到快速排序時,感覺這種排序方法非常巧妙,得知這種算法來源於歐幾里得算法(又名輾轉相除法),於是又複習一下歐幾里得算法。如果直接想看詳細證明的話可以忽略前面的話直接跳轉到我的證明(詳解)

歐幾里得算法

  歐幾里德算法又稱輾轉相除法,是指用於計算兩個正整數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)

參考資料

  歐幾里德算法的證明

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