歐幾里得演算法中,計算 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 短除法 短除法是求最大公因數的一種方法 先把每個數的因數找出來,然後再找出公因數,最後在公因數中找出最大公因數。因式分解法 在初中數...