扩展欧几里得算法的证明以及求逆元

在说扩展欧几里得算法之前,先说一下裴蜀定理。在数论中,裴蜀定理是一个关于最大公约数(或最大公约式)的定理:

  1. 若a,b是整数,且gcd(a,b) = d,那么对于任意的整数x,y,ax+by = m中的m一定是d的倍数。
  2. 一定存在整数x, y,使得 ax + by = gcd(a, b)

证明1:因为gcd(a, b) = d,所以d|a, d|b, 又因为x, y是整数, 所以d|ax, d|by, 所以d|ax+by, 即 d|m。

证明2:令s 为 ax + by 的最小正值,再令e = ma + nb, (m, n 为任意整数且e >= s)。e 对 s 作余除法,有 r = e mod s = e - qs = (ma + nb) - q(ax + by) = (m - qx)a + (n - y)b。
由此得到两个结论: 1. 0 <= r < s. 2. r 是 a 与 b 的线性组合。
如果 r > 0, 则与 “s 是 ax + by 的最小正值” 这一假设相悖,因此 r = 0,s | e, 即 s | ma + nb,。
因为m, n 为任意整数, 令 m = 1, n = 0, 得到 s | a, 同理得到 s | b, 因此 s 是 a 和 b 的公约数, 得到 s <= gcd(a, b)。
又因为 gcd(a, b) | a, gcd(a, b) | b, 因此 gcd(a, b) | ax + by, 即 gcd(a, b) | s,得到 gcd(a, b) <= s。
综上,当ax + by 是最小正值得时候, s = gcd(a, b), 即 ax + by = gcd(a, b), (因为是存在性证明,找到一个解就可以)。

扩展欧几里得算法主要针对于裴蜀定理的第二条,它是用来求出这样的x, y 的解的。
欧几里得算法的核心思想是递归。

我们先来看一下基本欧几里得算法。这个算法主要用来求两个整数的最大公约数。
在这里插入图片描述
(悄咪咪用一波学校课件,侵删orz)。
它的递归过程用到的定理是gcd(a, b) = gcd(b, a mod b), a, b 为整数且b 不为 0 (这个证明很简单,不作赘述)
递归出口用到的定理是gcd(r, 0) = r (0 与一个数的最大公约数是这个数本身)。

扩展欧几里得算法也利用了这两个理论进行递归,但这样是不够的,因为我们还需要求出等式 ax + by = gcd(a, b) 中x和y的解。
在用递归解决问题时,需要思考如何将当前问题归约为一个或多个简单的子问题,以及找到一个递归出口。模仿基本欧几里得算法, 我们仍旧利用 gcd(a, b) = gcd(b, a mod b) 进行问题的归约。
求出ax + by = gcd(a, b) 中x和y的解, 可以归约为:
求出bx’ + (a mod b)y’ = gcd(b, a mod b) 中x’和y’的解。

递归中子问题的结果基本是为主问题的解决服务的, 所以此时应思考如何通过求出的 x’和y’来解出 x y。很简单,由于gcd(a, b) = gcd(b, a mod b),代换一下得到:bx’ + (a mod b)y’ = ax + by。因为a, b是任意整数,把两边整理成a, b 的线性组合:
ay’ + b(x - qy’) = ax + by, (q = [a / b])
a 和 b 的系数对应相等, 得到:
x = y’
y = x’ - qy’ (q = [a(当前递归式子中的a) / b(当前递归式子中的b)])

而递归的出口,仍旧在gcd(r, 0)的时候,此时 rx’ = gcd(r, 0) = r, 得到 x’ = 1, y’ 可以为任意整数,为了方便,我们取y’ = 0, 逐级向上代换可以先求出x, y 的一组解(x0, y0)。

所以有: ax0 + by0 = gcd(a, b)

接下来我们要求出x, y 的通解
可以发现: a(x0 + kb) + b(y0 - ka) = gcd(a, b), (ka, kb为整数)。
为了使得结果能覆盖所有的解,此处的k要尽可能取小,容易发现k的最小值即为 1/gcd(a, b)
因此, 当得到一组解(x0, y0) 后,(x, y)的通解为:
x = x0 + (b/gcd(a, b))*t
y = y0 – (a/gcd(a, b))*t (t∈Z)

此外,扩展欧几里得算法还可以求a的逆元
在模n的最小剩余系中, a*a-1 ≡ 1 (mod n)
容易得到gcd(n, a) = 1。
设 a-1为x,
ax ≡ 1 (mod n) 等价于 m | ax - 1
令 y = -(ax - 1) n, y一定为整数
整理后得到ax + ny = 1 = gcd(a, n), 满足斐蜀定理的等式要求,因此可应用扩展欧几里得定理得到一个x的解,在找到其符合范围的通解,即为a的逆元。

例:找到11在模26的最小剩余系中的逆元。
该问题等价于求 11x + 26y = g(11, 26)中x 的解。
向下递归:
26x1 + 11y1 = g(26, 11) q = 2
11x2 + 4y2 = g(11, 4), q = 2
4x3 + 3y3 = g(4, 3), q = 1
3x4 + 1y4 = g(3, 1), q = 3
x5 = g(1, 0),
得到x5 = 1, 取y5 = 0;
x4 = y5 = 0, y4 = x5 - 3 * y5 = 1;
x3 = y4 = 1, y3 = x4 - 1 * y4 = -1;
x2 = y3 = -1, y2 = x3 - 2 * y3 = 3;
x1 = y2 = 3, y1 = x2 - 2 * y2 = -7;
x = y1 = -7
因为0 <= x <= 26, 所以给-7加一个周期 = -7 + 26 = 19
所以11在模26的最小剩余系中的逆元是19。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值