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

推理:

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

$\Large kx+y\equiv 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 -\biggl\lfloor\frac{p}{x}\biggr\rfloor *(p\ mod\ x)^{-1}(mod\ p)$

结果为

$\Large x^{-1}\equiv (p-\biggl\lfloor\frac{p}{x}\biggr\rfloor )*(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;
    }
}
posted @ 2017-10-20 09:16  Bennettz  阅读(242)  评论(0编辑  收藏  举报