前几天在看 lucas 定理的时候发现要求 1, 2,⋯,p−1modp 的逆元,然后就看到了一个 Θ(n) 的做法发现太神了,虽然想起来是挺简单的
这个做法实际上是这样的,首先 1−1≡1(modp)
然后我们设 p=k⋅i+r, r<i, 1<i<p
再将这个式子放到 modp 意义下就会得到
k⋅i+r≡0(modp)
两边同时乘上 i−1⋅r−1 就会得到
k⋅r−1+i−1i−1i−1≡≡≡0−k⋅r−1−⌊pi⌋⋅(pmodi)−1(modp)(modp)(modp)
于是就可以从前面推出当前的逆元了,代码也就一行