歐幾里得演算法

2021-05-26 00:41:03 字數 1159 閱讀 6333

歐幾里得演算法中,計算 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 = 1 ... 11 => 11 = 26 - 15 1 1 -1

15 % 11 = 1 ... 4 => 4 = 15 - 11 = 15 - (26 - 15) = -26 + 2*15 1 -1 2

11 % 4 = 2 .. 3 => 3 = 11 - 4*2 = (26 - 15) - (-26 + 15) * 2 = 3*26 - 5*15 2 3 -5

4 % 3 = 1 ... 1 => 1 = 4 - 3 = (-26 + 2*15) - (3*26 - 5*15) = -4*26 + 7*15 1 -4 7

3 % 1 = 3 ... 0

在每一輪,我們都可以得到乙個模的表示式為:ri = aix + biy

如果不考慮第一輪和第二輪,那麼ai 和 bi 可以表示為(qi 為每一輪得到的商):

ai = ai-2 - qi * ai-1

bi = bi-2 - qi * bi-1

現在來考慮第一輪和第二輪,按照上面的公式,可以認為

a-1 = 1, b-1 = 0

a0 = 0, b0 = 1

有了這兩對預設值,上面的兩個公式就成立了

求逆元,由上面可以看出,**(x, y) = 1 的時候

如果 ax + by = 1,那麼 ax = -by + 1 => ax = 1 (mod b)

這時候,a 即是 x 的逆元

int ** (int x, int y, int *a1, int *a2, int *b1, int *b2)

*a2 = *a1;

*b2 = *b1;

*a1 = a;

*b1 = b;

return ** (y, r, a1, a2, b1, b2);

}

歐幾里得演算法

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

歐幾里得演算法

在 幾何原本 中,歐幾里得提出了用輾轉相除的方法求解兩個整數 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 證明...

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

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