O(N)求出1~n逆元

这是一个黑科技。
可以将某些题目硬生生地压到O(N)
不过这求的是1~n的逆元,多了不行……


结论

接下来放式子:

inv[i]=(M-M/i)*inv[M%i]%M;

用数学方法来表示:
i1=(MMi)(Mmod  i)1mod  Mi^{-1}=\left(M-\lfloor\frac{M}{i}\rfloor\right)\left(M\mod i\right)^{-1}\mod M


证明

k=Mik=\lfloor\frac{M}{i}\rfloorr=Mmod  ir=M \mod i
ik+r0(mod  M)ikr(mod  M)\therefore ik+r \equiv 0 \left(\mod M\right) \\ \therefore -ik \equiv r \left(\mod M\right)
两边同时除以irir
kr1ii1(mod  M)ii1=kr1mod  M-k*r^{-1} \equiv i^{i-1} \left(\mod M\right) \\ \therefore i^{i-1}=-k*r^{-1} \mod M

i1=(MMi)(Mmod  i)1mod  Mi^{-1}=\left(M-\lfloor\frac{M}{i}\rfloor\right)\left(M\mod i\right)^{-1}\mod M

posted @ 2018-09-19 21:08  jz_597  阅读(138)  评论(0编辑  收藏  举报