定义
如果整数a, x满足
模逆元也叫模倒数, 可以理解为模p同余式中a的倒数即
注意, a在模p条件下存在逆元的充分必要条件是, a与p互素。
意义
当我们要求
由乘法逆元定义有
求法
扩展欧几里得算法
过程
已知, 扩展欧几里得算法可用于求
代码实现
python
python
def exgcd(a, b):
if b == 0:
return 1, 0
x, y = exgcd(b, a % b)
return y, x - y*(a // b)
ans = (exgcd(a, p)[0] % p + p) % p # 求a关于p的逆元
费马小定理
费马小定理可用于在p为素数时互质的情况下求
过程
由费马小定理, 当p为素数且a、p互质时,
所以在满足上述条件时,
python
代码实现
python
def quick_pow(a, n, p):
ans = 1
while n:
if n & 1:
ans = ans * a % p
a = a * a % p
n >>= 1
return ans
ans = quick_pow(a, p - 2, p) # 求a关于p的逆元
线性求逆元(递推)
递推法用于求[1, a]
区间的每个数mod p
的逆元。
过程
所以有递推式
代码实现
c++
cpp
inv[1] = 1;
for (int i = 2; i <= n; ++i) {
inv[i] = (long long)(p - p / i) * inv[p % i] % p;
}