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

    乘法逆元:若\(ab\equiv1(mod\;p)\),则称\(b\)\(a\)\(mod\;p\)意义下的乘法逆元.

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

    扩展欧几里得求逆元

    因为\(ab\equiv1(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\;\times\;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]\)表示\(i\)\(mod\;p\)(\(p\)为质数)意义下的逆元。

    \(re[i]=\begin{cases}1&i=1\\-p/i\;\times\;re[p\;mod\;i]&i>1\\\end{cases}\)

    证明:
    因为\((p/i)\;\times\;i+p\;mod\;i=p\),
    所以\((p/i)\;\times\;i+p\;mod\;i\equiv0(mod\;p)\)
    所以\((p/i)\;\times\;i\equiv-p\;mod\;i(mod\;p)\)
    所以\(-p/i\;\equiv\;p\;mod\;i\times\;i^{-1}(mod\;p)\)
    所以,

    \(\begin{split} &-(p/i)\;\times\;re[p\;mod\;i]\\ \equiv&-(p/i)\times(p\;mod\;i)^{-1}\\ \equiv&(p\;mod\;i)\;\times\;i^{-1}\times(p\;mod\;i)^{-1}\\ \equiv&\;i^{-1}(mod\;p)\\ \end{split}\)

    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];
    }
  • 相关阅读:
    Linux 关机和重启命令
    Linux ubuntu安装ftp服务器
    C++ map和unsorted_map底层实现
    C++中的那些容器在使用时,哪些情况下迭代器会失效
    虚函数表的构造
    C++容器 priority_queue,堆的实现
    c++11中的move是否会改变对象的地址
    (转)关于linux中内核编程中结构体的赋值操作(结构体指定初始化)
    无参方法
    类和对象
  • 原文地址:https://www.cnblogs.com/AireenYe/p/Inverse.html
Copyright © 2011-2022 走看看