1. 程式人生 > >Gcd&Exgcd算法

Gcd&Exgcd算法

img 歐幾裏得 方法 class 常常 擴展歐幾裏得 定義 alt auto

Preface

  對於許多數論問題,都需要涉及到Gcd,求解Gcd,常常使用歐幾裏得算法。

  對於許多求解問題,可以列出貝祖方程:ax+by=Gcd(a,b),用Exgcd解之即可到答案,Exgcd即擴展歐幾裏得算法。

  這裏是對於兩個算法的學習小記

Content

歐幾裏得算法

  由百度百科得

歐幾裏德算法又稱輾轉相除法,用於計算兩個正整數a,b的最大公約數。

從整數的除法可知:對任給二整數a,b0,必有二整數q及r存在,使得a=qb+r,0≤rb,並且q及r是唯一存在的,這是數論的一條基本定理,整數的一系列重要性質都可以由此得到,如果反復利用這一基本定理,就可以得到因為每進行一次除法,余數就至少減一,而b是有限的正整數,所以最多進行b次,總可以得到一個余數是零的等式,即rn+1=0。

  當然,百度說的這種話我都是看不懂的。

  其實輾轉相除法就是運用了Gcd(a,b)=Gcd(b,a mod b),直到a≡0(mod b),b即為所求。

  這個方法的目的是為了達到可以將求解的兩個數不斷縮小,使得效率為對數級別。

  那麽,我們如何求證這個式子的正確性呢?

  我們令

技術分享圖片

  根據模運算的定義,可以有

  

  

Gcd&Exgcd算法