扩展的欧几里得算法
扩展的欧几里得算法(Extended Euclidean algorithm)
扩展的欧几里得算法是欧几里得算法的扩展,除了计算a,b两个数的最大公因数,还能找到整数x,y,
使得ax + by = d = gcd(a, b)。它对于有限域中的计算以及RSA等密码算法非常重要。
github源码
推理(推理过程与上一章类似):
设:
$a = q_{1}b + r_{1} , r_{1} = ax_{1} + by_{1}$
$b = q_{2}r_{1} + r_{2} , r_{2} = ax_{2} + by_{2}$
$r_{1} = q_{3}r_{2} + r_{3} , r_{3} = ax_{3} + by_{3}%$
…
$r_{i-2} = q_{i}r_{i-1} + r_{i} , r_{i} = ax_{i} + by_{i}$
…
$r_{n-2} = q_{n}r_{n-1} + r_{n} , r_{n} = ax_{n} + by_{n}$
$r_{n-1} = q_{n+1}r_{n} + 0$
则:
$r_{i} = r_{i-2} -q_{i}r_{i-1}$
因:
$r_{i-2} = ax_{i-2} + by_{i-2}$
$r_{i-1} = ax_{i-1} + by_{i-1}$
$r_{i} = ax_{i} + by_{i}$
代入,得:
$ax_{i} + by_{i} = (ax_{i-2} + by_{i-2}) - q_{i}(ax_{i-1} + by_{i-1})$
$= a(x_{i-2} - q_{i}x_{i-1}) + b(y_{i-2} -q_{i}y_{i-1})$
即:
$x_{i} = x_{i-2} - q_{i}x_{i-1}$
$y_{i} = y_{i-2} - q_{i}y_{i-1}$
由$r_{i} = r_{i-2} -q_{i}r_{i-1}$可知,
新余数$r_{i}$的计算基于前面两个计算的余数$r_{i-1}$和$r_{i-2}$,
那么若按此方式计算,在开始时需要知道$r_{0}$和$r_{-1}$的值,令$r_{-1}=a$,$r_{0} = b$,则有:
计算 | 满足 | 计算 | 满足 |
---|---|---|---|
$r_{-1}=a$ | $x_{-1}=1$ $y_{-1}=0$ |
$a=ax_{-1}+by_{-1}$ | |
$r_{0}=b$ | $x_{0}=0$ $y_{0}=1$ |
$b=ax_{0}+by_{0}$ | |
$r_{1}$ = a mod b $q_{1} = a / b$ |
$a = q_{1}b+r_{1}$ | $x_{1}=x_{-1}-q_{1}x_{0}=1$ $y_{1}=y_{-1}-q_{1}y_{0}=-q_{1}$ |
$r_{1}=ax_{1}+by_{1}$ |
$r_{2}$ = b mod $r_{1}$ $q_{2} = b / r_{1}$ |
$b = q_{2}r_{1}+r_{2}$ | $x_{2}=x_{0}-q_{2}x_{1}$ $y_{2}=y_{0}-q_{2}y_{1}$ |
$r_{2}=ax_{2}+by_{2}$ |
$r_{3} = r_{1}$ mod $r_{2}$ $q_{3} = r_{1} / r_{2}$ |
$r_{1} = q_{3}r_{2}+r_{3}$ | $x_{3}=x_{1}-q_{3}x_{2}$ $y_{3}=y_{1}-q_{3}y_{2}$ |
$r_{3}=ax_{3}+by_{3}$ |
… | … | … | … |
$r_{n} = r_{n-2}$ mod $r_{n-1}$ $q_{n} = r_{n-2} / r_{n-1}$ |
$r_{n-2} = q_{n}r_{n-1}+r_{n}$ | $x_{n}=x_{n-2}-q_{n}x_{n-1}$ $y_{n}=y_{n-2}-q_{n}y_{n-1}$ |
$r_{n}=ax_{n}+by_{n}$ |
$r_{n+1} = r_{n-1}$ mod $r_{n} = 0$ $q_{n+1} = r_{n-1} / r_{n}$ |
$r_{n-1} = q_{n+1}r_{n} + 0$ | $d=gcd(a, b)=r_{n}$ $x = x_{n};y = y_{n}$ |
C实现
循环方式实现
1 | // Extended Euclidean Algorithm |
本文标题:扩展的欧几里得算法
文章作者:Mr Bluyee
发布时间:2019-07-20
最后更新:2019-07-20
版权声明:The author owns the copyright, please indicate the source reproduced.