如果尝试对取模后的结果直接进行除法运算,可能会出现除不尽的问题,
这时候就需要用到乘法逆元。
乘法逆元有着类似倒数的性质:对于正整数 xx,如果存在正整数 yy,满足
xy1(modxy ≡ 1 (mod p)p)
x,yx,y 互为模 pp 意义下的乘法逆元。
当我们想做除法运算时,可以用乘上对应的乘法逆元来代替。
xxpp 互素时,存在唯一的 xx 的逆元。当 pp 是素数时,所有不是 pp的倍数的整数都有唯一的逆元,所以大部分题目都会对素数取模。

扩展欧几里得算法求逆元

求逆元就是求如下方程的解:
ax1(modax ≡ 1 (mod p)p)
也就是
axkp=1,kZax − kp = 1,k ∈ Z
假如 gcd(a,p)=1gcd(a, p) = 1(也就是逆元存在的条件),就可以用扩欧来计算 xx了。注意结果可能是负数,此时需要再加上 pp

利用费⻢小定理求逆元

根据费⻢小定理
ap11(moda^{p−1} ≡ 1 (mod p)p)
改写一下,就得到
aap21(moda · a^{p−2} ≡ 1 (mod p)p)
于是 ap2a^{p−2}%pp 就是 aa 的逆元,可以通过快速幂来计算,也是非常实用的一种求逆元方法。