zoukankan      html  css  js  c++  java
  • 乘法逆元

    乘法逆元

    定义

    对于(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;
    
  • 相关阅读:
    【原创】ZYNQ学习笔记(一) HelloWorld实现
    设置毛玻璃效果
    什么是UIImageView
    短信监听器
    内容观察者
    插入联系人
    UIFont
    什么是UILabel
    读取联系人案例
    利用内容提供者插入短信
  • 原文地址:https://www.cnblogs.com/Psephurus-Gladius-zdx/p/12127910.html
Copyright © 2011-2022 走看看