线性求所有数模p的乘法逆元

推理:

假如当前计算的是x在%p意义下的逆元,设$p=kx+y$,则

$Large kx+yequiv 0(mod p)$

两边同时乘上$x^{-1}y^{-1}$(这里代表逆元)

则方程变为$Large k*y^{-1}+x^{-1}equiv 0(mod p)$

化简得$Large x^{-1}equiv -k*y^{-1}(mod p)$

$Large x^{-1}equiv -iggllfloorfrac{p}{x}iggr floor *(p mod x)^{-1}(mod p)$

结果为

$Large x^{-1}equiv (p-iggllfloorfrac{p}{x}iggr floor )*(p mod x)^{-1}(mod p)$

除了1,p mod x一定小于x,它的逆元已经算过,所以可以线性求出逆元

void Inverse(int p,int a[],int n){//线性求<=n的数%p意义下的逆元 
    a[1]=1;
    for(int i=2;i<=n;i++){
        a[i]=1ll*(p-p/i)*a[p%i]%p;
    }
}
原文地址:https://www.cnblogs.com/bennettz/p/7697787.html