欧几里得算法
欧几里得算法,也叫辗转相除,简称 gcd,用于计算两个整数的最大公约数
定义 gcd(a,b) 为整数 a 与 b 的最大公约数
给定整数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的最大公因子
求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.如果这两个正整数互素(互质),还能确定他们的逆元
如果整数n≥1,且gcd(a,n)=1,那么a有一个模n的乘法逆元a-1。即对小于n的正整数a,存在一个小于n的整数a,存在一个小于n的整数a-1,使得a * a-1≡1 mod n。

(1)1234 mod 4321 用扩展欧几里德算法的计算过程如下:
循环次数 |
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 |
无逆元