求逆元的方法总结

定义:如果有 \(ax\equiv 1_\pmod n\) ,则 \(x\)\(\mathrm{mod}\,n\) 意义下 \(a\) 的乘法逆元,记作 \(x=\mathrm{inv} (a)\)\(x=a^{-1}\)

一个数有逆元当且仅当 \(\gcd(a,n)=1\) 且一个数的逆元唯一。

三种求法

1"利用扩展欧几里得:将 \(ax\equiv 1_\pmod n\)​​​ 展开得 \(ax+ny=1\)​​​ ,若 \(\gcd(a,n)=1\)​​​ ,则可以通过 \(exgcd\)​​​ 解出 \(x\)​​​ ,并调整到正常范围内。

不需要 \(n\)​ 为质数

2"利用费马小定理: 已知 \(a^{p-1} \equiv 1_\pmod p\) ,则 \(a*a^{p-2} \equiv 1_\pmod p\)

\(p\) 为质数时可以考虑费马小定理

3"欧拉定理:已知 \(a^{\varphi(p)} \equiv 1_\pmod p\) ,可以得到逆元为 \(a^{\varphi(p)-1}\)

适用于模数不是质数的情况

4"线性递推求出逆元

给定数组 \(inv[MAXN]\)​ 记录逆元,\(inv[i]\)​ 为是 \(\mathrm{mod}\,p\)​​ 意义下的乘法逆元,则有线性递推式

\[inv[i] = (p - \lfloor \dfrac {p} i \rfloor) * inv[p \,\%\, i]\, \% \,p\\其中inv[1] = 1 \]

可以在 \(\mathcal{O}(n)\)​ 的复杂度内维护出 \(1 - N\)​ 的逆元,要保证 \(i < mod\)​ 且 \(p\)​ 为质数

5.利用积性函数的性质

考虑到逆元函数为积性函数, 即有 \(inv[ab] = inv[a] \times inv[b]\) ,可以 \(\mathcal O(n)\) 的维护出阶乘的逆元,可以替换 费 马小定理+快速幂 的组合

posted @ 2021-08-01 20:30  circletime  阅读(520)  评论(0)    收藏  举报