线性求逆元

方法一

递推
假设现在要求 \(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

不想写其实是我没用过,一直用的递推

posted @ 2020-07-11 20:17  Aliemo  阅读(186)  评论(1编辑  收藏  举报