歐幾里得演算法與裴蜀等式
阿新 • • 發佈:2018-12-17
歐幾里得演算法
歐幾里得演算法是歐幾里得(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 劉鐸 離散數學