求逆元的方法总结
定义:如果有 \(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\) 意义下的乘法逆元,则有线性递推式
可以在 \(\mathcal{O}(n)\) 的复杂度内维护出 \(1 - N\) 的逆元,要保证 \(i < mod\) 且 \(p\) 为质数
5.利用积性函数的性质
考虑到逆元函数为积性函数, 即有 \(inv[ab] = inv[a] \times inv[b]\) ,可以 \(\mathcal O(n)\) 的维护出阶乘的逆元,可以替换 费 马小定理+快速幂 的组合