欧几里得算法
欧几里得算法,也叫辗转相除,简称 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 |
无逆元