主要是为了密码学整理的。(这排版真是。。我真的不知道怎么弄,谁能帮帮我)
欧几里得算法
- 欧几里得算法或者叫做辗转相除法,是指用于计算两个正整数a,b的最大公约数。
gcd(a,b)=gcd(b,amodb)(1) (1) g c d ( a , b ) = g c d ( b , a m o d b )
eg: 计算45和12的最大公约数。
gcd(45,12) = gcd(12,9)
gcd(12,9) = gcd(9,3)
gcd(9,3) = gcd(3,0)
所以,45和12的最大公约数是3.
扩展欧几里得算法
给予二整数 a 与 b, 必存在有整数 x 与 y 使得
ax+by=gcd(a,b)=gcd(b,amodb)=bx+(amodb)y(2) (2) a x + b y = g c d ( a , b ) = g c d ( b , a m o d b ) = b x + ( a m o d b ) y
- 先将表达式按上面的公式做到底, Mul=y的系数/x的系数 M u l = y 的 系 数 / x 的 系 数 ;
- 再逆溯回去,得到x和y的值。
- 逆溯方法: tmp=y;y=x;x=tmp−mul∗x t m p = y ; y = x ; x = t m p − m u l ∗ x 。
应用
- 在有限域中求某个数的逆 。
eg:在Z26上求17的逆。
Mul | Expression | Trace Back |
---|---|---|
mul:1 | 26y+17x=1(mod26) 26 y + 17 x = 1 ( m o d 26 ) | tmp=−1,y=2,x=−1−1×2=−3 t m p = − 1 , y = 2 , x = − 1 − 1 × 2 = − 3 |
mul:1 | 17y+9x=1(mod26) 17 y + 9 x = 1 ( m o d 26 ) | tmp=1,y=−1,x=1−1×(−1)=2 t m p = 1 , y = − 1 , x = 1 − 1 × ( − 1 ) = 2 |
mul:1 | 9y+8x=1(mod26) |