逆元
因为mod不满足除法,所以我们需要用到逆元来求a/b的模数。逆元就相当与(1/b)mod p
逆元有两种求法。第一种就是用扩展欧几里德来求解。
我们有同余方程
ax≡1(modp)
如果有解,x就算a模p意义下的逆元。
可以变成
ax−yp=1
用扩展欧几里德来求解。
线性筛逆元
其实还有线性的方法筛出**质素**p的逆元。
我们设
1−1≡1(modp)
设 p=x∗a+r,r<a,1<i<p
有我们知道
p≡0(modp)=>x∗a+r≡0(modp)
两边同时乘以 a−1∗r−1 得到
x∗r−1+a−1≡0(modp)
整理得
a−1≡−x∗r−1(modp)
a−1≡−⌊pa⌋∗(pmoda)−1(modp)
代码
a[1]=1;
for(int i=2;i<p;i++)
a[i]=-(p/i)*a[p%i];