O(n) 线性求逆元

241 阅读1分钟

学一波操作

对于质数 p ,在线性时间内求出 [1,n] 的逆元

数学过程

显然对于 1 有

1^{-1} \equiv 1 \mod p

对于 i \in [2,p]

p=k*i+r , r<i(一)

则有

k*i+r \equiv 0\mod p

然后两边同时乘上 i^{-1}\cdot r^{-1} 得到

k\cdot r^{-1}+i^{-1}\equiv 0 \mod p
i^{-1}\equiv -k\cdot r^{-1}    \mod p(二)

由于i<r(即())

所以有

k=\lfloor\frac{p}{i}\rfloor
r=p\mod i

代入(

i^{-1}\equiv -\lfloor \frac{p}{i}\rfloor\cdot(p\mod i)^{-1}	  \mod p

代码过程

于是我们就有了代码

A[1]=1
A[i]= -p/i*A[p%i]

对于任意的 ip\mod i < i ,因此 A[p \mod i] 一定已知

则通过 A[1]=1,可推出所有 i\in [1,p-1] 的逆元