线性求逆元
方法一
递推
假设现在要求 \(i\) 的逆元
考虑带余除法, 设 \(p = iq + r\), 则有 \(iq + r \equiv 0 \pmod p\)
考虑到 \(p\) 是质数, 因此 \(r\) 不为 \(0\), \(r\) 的逆元存在
等式两边乘 \(i^{-1} + r^{-1} \equiv 0 \pmod p\)
因此 \(i^{-1} \equiv -qr^{-1} \equiv -\lfloor\dfrac{p}{i}\rfloor(p \bmod i)^{-1} \pmod p\)
code
inline int inv(int n) {
inv[1] = 1;
for (int i = 2; i <= n; i++ ){
inv[i] = (p - p / i)*inv[p % i] % p;
}
}
方法二
倒推
先求 \(n!\) 的逆元(\(exgcd\) 或者之后会提到的快速幂)
然后利用 \(((k - 1)!)^{-1} \equiv k \times (k!) ^{-1} \pmod p\)
倒推求出 \(1!...n!\) 的逆元
再利用 \(k^{-1} \equiv (k - 1)! \times (k!)^{-1} \pmod p\)
就可以求出 \(1...n\) 的逆元了
code
不想写其实是我没用过,一直用的递推
时间会刺破青春表面的彩饰,会在美人的额上掘深沟浅槽;会吃掉稀世之珍!天生丽质,什么都逃不过他那横扫的镰刀。
博主写的那么好,就不打赏一下么(打赏在右边)