乘法逆元

乘法逆元

定义

对于一个线性同余方程 \(ax \equiv 1 \pmod p\),称 \(x\)\(a \bmod p\) 下的逆元,可记作 \(a^{-1}\)

求法

快速幂求逆元

我们需要使用费马小定理:

\[\begin{aligned} ax &\equiv 1 \pmod p\\ ax &\equiv a^{p - 1} \pmod p \\ x &\equiv a^{p - 2} \pmod p \end{aligned} \]

那么我们就可以直接使用快速幂求解了。

扩展欧几里得求逆元

考虑将 \(ax \equiv 1 \pmod p\) 化成 \(ax + by = c\) 的形式。显然有 \(ax + kp = 1\),那么直接带入扩展欧几里得求解即可。

线性递推

可以在 \(\mathcal{O(n)}\) 的时间复杂度内预处理出逆元。

\(p = k \cdot a + b\),有 \(k \cdot a + b \equiv 0 \pmod p\),此时为了构造出 \(a^{-1}\),我们可以巧妙地给式子乘上一个 \(a^{-1} \cdot b^{-1}\),则 \(k \cdot b^{-1} + a^{-1} \equiv 0 \pmod p\),移项,\(a^{-1} \equiv -\lfloor \frac{p}{a} \rfloor \cdot (p \bmod a)^{-1} \pmod p\),那么我们就可以愉快地递推了。

$\tt{Link}$
inv[0] = 1;
for (int i = 1; i <= n; ++ i )
	inv[i] = (p - p / i) * inv[p % i] % p;
posted @ 2024-01-29 17:24  songszh  阅读(6)  评论(0编辑  收藏  举报