zoukankan      html  css  js  c++  java
  • [学习笔记]乘法逆元

    乘法逆元:若abequiv1(mod$;$p),则称bamod$;$p意义下的乘法逆元.

    本文介绍乘法逆元的三种求法.

    扩展欧几里得求逆元

    因为abequiv1(mod$;$p),所以设q满足ab+pq=1,

    则可以用扩展欧几里得求关于b,q的方程ab+pq=1的一组解,即求出b.

    inline int exgcd(int a,int b,int &x,int &y){
        if(!b){
            x=1;y=0;return a;
        }
        int ret=exgcd(b,a%b,y,x);
        y-=a/b*x;return ret;
    }
    inline int inver{
        r=exgcd(a,p,b,q);
        if(r!=1) return -1;
        return b;
    }

    费马小定理求逆元

    因为a^{p-1}equiv1(mod$;$p)(gcd(a,p)=1),所以a$	imes$a^{p-2}equiv1(mod$;$p),

    a^{p-2}为a在mod$;$p意义下的逆元.

    typedef long long ll;
    inline ll power(ll x,ll k){
        ll ret=1;
        while(k){
            if(k&1) ret=ret*x%p;
            x=x*x%p;k>>=1;
        }
        return ret;
    }
    inline ll inver{
        return power(a,p-2);
    }

    线性求逆元

    re[i]表示imod$;$p(p为质数)意义下的逆元。

    re[i]=egin{cases}1&i=1\-p/i;	imes;re[p\%i]&x>1\end{cases}

    证明:因为(p/i);	imes;i+p\%i=p,

    所以(p/i);	imes;i+p\%iequiv0(mod;p)

    所以(p/i);	imes;iequiv-p\%i(mod;p)

    所以-p/i$equiv$p\%i;	imes;i^{-1}(mod;p)

    所以egin{split}
&-(p/i);	imes;re[i]\
equiv&-(p/i)	imes(p\%i)^(-1)\
equiv&(p\%i)^{-1}	imes(p\%i)^{-1}\
equiv&i^{-1}
end{split}-p/i*re[i]

     equiv-p/i	imes*(p\%i)^{-1}

     equiv;p\%i;	imes;i^{-1}	imes(p\%i)^{-1}

     equiv;i^{-1}(mod;p)

    typedef long long ll;
    inline ll inver{
        re[1]=1;
        for(ll i=2,mul;i<=a;++i){
            re[i]=-p/i*re[p%i]%p;
            if(re[i]<0){
                mul=(0-re[i])/p+1;
                re[i]=(re[i]+mul*p)%p;
            }
        }
        return re[a];
    }
  • 相关阅读:
    继承ServletContextListener可以完成的事情
    redis-win7
    jquery-attr与prop
    web表单disable问题
    html-select
    wordpress安装五步法
    CSS布局整理
    photoshop制作古风画
    CSS布局——三栏布局
    sublime text3配置插件
  • 原文地址:https://www.cnblogs.com/AireenYe/p/5929578.html
Copyright © 2011-2022 走看看