一些逆元小学习
假如我们想求 \(x\) 模 \(p\) 的逆元,设 \(p=kx+r\),那么有:
\[\begin{align*}
kx+r&\equiv0&\pmod p
\\ \frac {kx}{xr}+\frac r{xr}&\equiv0&\pmod p
\\ k\times r^{-1} + x^{-1}&\equiv0&\pmod p
\\ x^{-1}&\equiv -\lfloor\frac px\rfloor\times r^{-1} &\pmod p
\end{align*}
\]
那么可以转化为求 \(r\),也就是 \(p\bmod x\) 的逆元。
通常情况下这个可以用来线性处理前若干个正整数的逆元。
但是借助它,我们可以得到一种快速的全值域逆元。
具体来说,取阈值 \(B\)。直接预处理前 \(B\) 个正整数的逆元,如果询问的数大于 \(B\),就暴力跳 \(p\bmod x\) 直到跳进 \(B\)。
取 \(B=10^7,p\approx 10^9\) 的话,平均情况下能在 \(4.18\) 步内跳进。
以及有一些其他的均摊 \(O(1)\) 的逆元方法。
比如离线下来统一处理。
还有维护分数形式,最后除一次。
本文来自博客园,作者:CuteNess,转载请注明原文链接:https://www.cnblogs.com/CuteNess/p/19196671

浙公网安备 33010602011771号