模逆元:模运算中的除法
理解模逆元的定义、存在条件和计算方法,并区分模除法与普通实数除法。
关键词模逆元 · 互质 · Bézout 等式 · 扩展欧几里得算法
建议先了解
- 同余与剩余类
- 欧几里得算法与 Bézout 等式
1. 为什么模运算不能直接做普通除法
在实数中,非零数 的乘法逆元是 。但模 的运算对象是剩余类,普通小数通常不属于这个系统。
在模运算中,“除以 ”应理解为“乘以一个能够把 乘回 1 的元素”。这个元素就是模逆元。
2. 模逆元的定义
如果存在整数 ,使
就称 是 模 的乘法逆元(Modular Multiplicative Inverse),记作
例如在模 7 下:
所以
3. 逆元存在的充要条件
结论是
从互质推出逆元存在
若 ,Bézout 等式保证存在整数 ,使
两边模 :
因此 是 的模逆元。
从逆元存在推出互质
若 ,则存在整数 ,使
整理为
任何同时整除 的整数都必须整除左侧,因此也必须整除 1。两者最大公约数只能是 1。
4. 用扩展欧几里得算法求逆元
求 在模 下的逆元,就是寻找
因为
所以
这给出 。在模 7 下,
所以
负的 Bézout 系数需要归一化为常用代表元:
5. 一个不存在逆元的例子
考察 2 在模 6 下是否有逆元:
所以逆元不存在。直接观察也能发现, 永远是偶数,不可能满足
这说明不能在模 6 的环境中随意约去因子 2。
6. 模除法的正确含义
如果 在模 下存在逆元,则
表示
这个写法有一个不可省略的前提:
7. Python 验证
from math import gcd
n = 12
for a in range(1, n):
inverse = None
for x in range(1, n):
if (a * x) % n == 1:
inverse = x
break
print(a, gcd(a, n), inverse)
预期现象:只有满足 gcd(a, 12) == 1 的元素能够找到逆元。
这项枚举只能验证有限个具体例子;一般结论仍来自 Bézout 等式。
8. 自测
- 模逆元的定义是什么?
- 5 在模 12 下是否存在逆元?
- 6 在模 15 下是否存在逆元?
- 为什么模除法必须先检查最大公约数?
参考答案
- 若 ,则 是 模 的逆元。
- 存在,因为 ,且 。
- 不存在,因为 。
- 只有分母与模数互质时,分母才有模逆元。
上一篇:同余与剩余类。
下一篇:费马小定理与快速求逆。