歐幾里得演算法

2022-09-15 07:33:12 字數 971 閱讀 9026

在«幾何原本»中,歐幾里得提出了用輾轉相除的方法求解兩個整數\(a,b\)的最大公約數的演算法:

gcd(a, b)

if (0 == b) return a

else return gcd(b, a mod b)

定理:若整數\(a,b\)的最大公約數為\(gcd(a,b)\),那麼\(gcd(a,b)=gcd(b,a\,mod\,b)\)

證明:令\(d\)表示\(a,b\)的公約數,那麼\(d|a\)且\(d|b\)

推出\(d|(a\,mod\,b)=a-kb\)

所以\((a,b)\)和\((b,a\,mod\,b)\)兩者擁有的公約數集合是一樣的

即得證歐幾里得演算法最多隻會遞迴\(\theta(\log n)\)次,所以完全不用擔心爆棧,證明如下:

引理:設\(a>b\geq 1\)並且\(gcd(a,b)\)遞迴呼叫了\(k\geq 1\)次,那麼\(a\geq f_,b\geq f_\),其中\(f_k\)表示第\(k\)項斐波那契數

證明:這裡用歸納法證明,當\(k=1\)時,\(b\geq f_2=1,a\geq f_3=2\)成立

當\(k>1\)時,\(b\geq f_,a\,mod\,b\geq f_\)並且\(a\geq b+(a\,mod\,b)\geq f_+f_=f_\)

當要求解方程\(a∗x+b∗y=gcd(a,b)\)的整數解的時候,只需要擴充套件一下歐幾里得演算法就可以得到整數解\((x,y)\):

exgcd(a, b, &x, &y)

if (0 == b)

x = 1 y = 0

return a

else

d = exgcd(b, a % b, &xx, &yy)

x = yy y = xx - a / b * yy

return d

歐幾里得演算法

歐幾里得演算法中,計算 x,y 的最大公約數的方法是輾轉相除,例如 26,15 26 15 1 11 15 11 1 4 11 4 2 3 4 3 1 1 3 1 3 0 可知,26,15 1 如果 x,y r,那麼有 ax by r,可以看出,上面的步驟實際上是可以直接得出 a,b 的 26 15...

歐幾里得演算法

輾轉相除法,又被稱為歐幾里德 euclidean 演算法,是求最大公約數的演算法。當然也可以求最小公倍數。以除數和餘數反覆做除法運算,當餘數為 0 時,取當前算式除數為最大公約數。可以使用遞迴實現,也可以使用迴圈實現。program algorithm code description 歐幾里得演算...

歐幾里得演算法 小知識 什麼是歐幾里得演算法

12 和 18 的最大公約數是多少?最大公約數 最大公約數,也稱最大公因數 最大公因子,指兩個或多個整數共有約數中最大的乙個。例如 18 與 12 的最大公約數為 6 短除法 短除法是求最大公因數的一種方法 先把每個數的因數找出來,然後再找出公因數,最後在公因數中找出最大公因數。因式分解法 在初中數...