乘法逆元

乘法逆元

定义

对于(a,p,x in mathbb Z),若((a,p)=1),且(ax equiv 1(mod;p)),则将(x)称作(a)在模(p)意义下的逆元,记作(x=a^{-1})

主要性质

[bx equiv b/a(mod;p) ]

我们知道,同余是不满足同除性的(除数与模数互质时除外),因此不能直接对除法进行取模。而这条性质,可以将除法转换为乘法,从而可以在过程中取模。

下面给出此性质的证明:

[egin{aligned} &ecause ax equiv 1(mod;p)\ & herefore abx equiv b(mod;p)\ 又&ecause (a,p)=1\ & herefore bx equiv b/a(mod;p) end{aligned} ]

求法

扩展欧几里得算法

扩展欧几里得算法可以用来求(ax+by=(a,b))这一方程的一组特解,而我们所要求的是(ax equiv 1(mod;p))的解。将原方程进行变形,我们可以得到

[egin{aligned} &ecause ax equiv 1(mod;p)\ & herefore p mid (ax-1)\ & herefore ax-1=-py(y in mathbb Z)\ & herefore ax+py=1 end{aligned} ]

故使方程(ax+py=1)成立的(x)值即为(a)的逆元。

代码如下:

void exgcd(int a,int b,int &x,int &y)
{
    if(!b)
    {
        x=1;
        y=0;
        return;
    }
    exgcd(b,a%b,x,y);
    int t=x;
    x=y;
    y=t-a/b*y;
    return;
}

欧拉定理

根据欧拉定理,对于(a,p in mathbb Z),若((a,p)=1),则有(a^{varphi (p)} equiv 1(mod;p)),由此可得

[a cdot a^{varphi(p)-1} equiv 1(mod;p) ]

(a^{varphi(p)-1})即为(a)的逆元。

费马小定理

根据费马小定理,对于(a,p in mathbb Z),若(p)为素数,则有(a^{p} equiv a(mod;p))

特别地,当((a,p)=1)时,(a^{p-1} equiv 1(mod;p))

由此可得

[a cdot a^{p-2} equiv 1(mod;p) ]

(a^{p-2})即为(a)的逆元。

递推

对于(1le i < p,i in mathbb{Z})

[egin{aligned} &设p=ki+t(k,tin mathbb{Z},0<t<i)\ & herefore k=p/i,t=p\%i,ki+t equiv 0(mod;p)\ & herefore ki equiv -t(mod;p)\ & herefore -kt^{-1} cdot i equiv 1(mod;p)\ end{aligned} ]

(-kt^{-1})(i)的逆元,

由取值范围可以得到若从(1)开始递推,(t^{-1})将比(i^{-1})先进行计算,所以我们可以得到递推式

[i^{-1}= egin{cases} 1 & ext{i=1}\ -p/i*(p\%i)^{-1} & ext{1<i<p} end{cases} ]

代码如下:

inv[1]=1;
for(int i=2;i<=n;++i)
	inv[i]=(p-p/i)*inv[p%i]%p;
原文地址:https://www.cnblogs.com/Psephurus-Gladius-zdx/p/12127910.html