歐幾里得算法,也叫展轉相除,簡稱 gcd,用於計算兩個整數的最大公約數算法
定義 gcd(a,b) 爲整數 a 與 b 的最大公約數spa
給定整數a和b,且b>0,重複使用帶餘除法,即每次的餘數爲除數去除上一次的除數,直到餘數爲0,這樣能夠獲得下面一組方程:
a = bq1+r1, 0 < r1 <b,
b = r1q2+r2, 0 < r2 < r1,
r1 = r2q3+r3, 0 < r3 < r2,
……
rj-1 = rjqj+1
最後一個不爲0的餘數rj就是a和b的最大公因子code
求gcd (1970,1066) 用歐幾里德算法的計算過程以下: 1970=1×1066+904 1066=1×904+162 904=5×162+94 162=1×94+68 94=1×68+26 68=2×26+16 26=1×16+10 16=1×10+6 10=1×6+4 6=1×4+2 4=2×2+0 所以gcd (1970,1066) = 2
1.可以肯定兩個正整數的最大公約數
2.若是這兩個正整數互素(互質),還能肯定他們的逆元blog
若是整數n≥1,且gcd(a,n)=1,那麼a有一個模n的乘法逆元a-1。即對小於n的正整數a,存在一個小於n的整數a,存在一個小於n的整數a-1,使得a * a-1≡1 mod n。table
(1)1234 mod 4321 用擴展歐幾里德算法的計算過程以下:class
循環次數 | Q | X1 | X2 | X3 | Y(T1) | Y(T2) | Y(T3) |
初始值 | - | 1 | 0 | 4321 | 0 | 1 | 1234 |
1 | 3 | 0 | 1 | 1234 | 1 | -3 | 619 |
2 | 1 | 1 | -3 | 619 | -1 | 4 | 615 |
3 | 1 | -1 | 4 | 615 | 2 | -7 | 4 |
4 | 153 | 2 | -7 | 4 | -307 | 1075 | 3 |
5 | 1 | -307 | 1075 | 3 | 309 | -1082 | 1 |
- 1082 =3239 mod 4321,因此逆元是 3239擴展
(2)24140 mod 40902循環
循環次數 | Q | X1 | X2 | X3 | Y(T1) |
Y(T2) | Y(T3) |
初始值 | - | 1 | 0 | 40902 | 0 | 1 | 24140 |
1 | 1 | 0 | 1 | 24140 | 1 | -1 | 16762 |
2 | 1 | 1 | -1 | 16762 | -1 | 2 | 7378 |
3 | 2 | -1 | 2 | 7378 | 3 | -5 | 2006 |
4 | 3 | 3 | -5 | 2006 | -10 | 14 | 1360 |
5 | 1 | -10 | 14 | 1360 | 13 | -19 | 646 |
6 | 2 | 13 | -19 | 646 | -36 | 52 | 68 |
7 | 9 | -36 | 52 | 68 | 326 | -487 | 34 |
8 | 2 | 326 | -487 | 34 | -688 | 1026 | 0 |
無逆元gc