1. 程式人生 > >歐幾里得演算法與裴蜀等式

歐幾里得演算法與裴蜀等式

歐幾里得演算法

歐幾里得演算法是歐幾里得(Euclid)在《幾何原本》中提出的計算最大公因子的演算法,被認為是最早的演算法,也是人類歷史上最優美的演算法。

在表述演算法之前,先給出演算法的理論基礎:

定理:設a=qb+r,其中a,b,q,r都是整數,則gcd(a,b)=gcd(b,r)

證明:

若d|a且d|b,則有d|a且d|r=a-qb

若d|b且d|r,則有d|b且d|qb+r=a

這表明a與b的公因子集合與b與c的公因子集合相同,最大公因數肯定相同。

演算法實現:

 int gcd(int a, int b)
 {
     return b == 0 ? a : gcd(b, a % b);
}

 

這個演算法也被叫做“輾轉相除法”,為什麼呢?

你看啊,這個過程先右除以左,然後左除以右,再右除以左,左除以右......,就像一個人輾轉反側,所以輾轉相除法就是從演算法表現得到的。我們進一步分析,會發現另一個現象。

觀察輸出的5是怎麼得到的?

  • 5=85-2*40
  • 5=85-2*(210-2*85)=5*85-2*210
  • 5=5*(715-3*210)-2*210=5*715-17*210

可以發現,最大公因子5可以由a,b線性表示。

裴蜀等式

定理:對於不全為0的整數a,b和d,方程sa+tb=d存在整數解s和t當且僅當gcd(a,b)|d。方程sa+rt=d稱作裴蜀(Bezout)等式或貝祖等式。

證明:

(充分性)通過回代法,可知sa+rt=gcd(a,b)存在整數解s’和t’,若d=k·gcd(a,b),則ks’,kt’是方程的一組解。

(必要性)若方程存在整數解s,t,則gcd(a,b)|sa+rt=d

 

 

參考連結:中國大學mooc  劉鐸  離散數學