zoukankan      html  css  js  c++  java
  • 数学知识 乘法逆元

    如果(a *b equiv 1(mod p))

    我们就说a和b在mod p的意义下互为乘法逆元,和倒数的概念比较类似

    逆元记做(a=inv(b))

    逆元有什么用?我们常常会遇到要求结果对一个大质数p取模因为答案很大,出题人为了不麻烦大家写高精

    就采取了这样的方法(出现大的质数是不是就在暗示要逆元呢),加减法和乘法对取模运算是封闭的,所以你可以处处取模来避免溢出

    但是我们遇到了除法就犯了难,为了解决模意义下的除法运算的问题,我们引入了逆元,inv(a)

    其实可以看做模p意义下的({1}over{a})

    那么在模p意义下({a} over {b})

    就可以变形为(a*inv(b)(mod p))

    乘法逆元的方法有扩展欧几里得,费马小定理,线性递推

    费马小定理

    p为质数gcd(a,p)=1,则有(a^{p-1}equiv1(mod p))

    inv[a]=(a^{p-2}(mod p))就是a 的逆元

    于是对(a^{p-2})算一下快速幂就好了,注意这个方法只对p是质数的情况有效

    inline int quick_pow(long long a,long long b,long long p)
    {
        long long ans=1;
        long long base=a;
        while(b)
        {
        if(b&1)
        ans=ans%p*base%p;
        base=base*a%p;
        b>>=1;
        }
        return ans;
    }
    inline long long inv(long long a,long long p)
    {
        return quick(a,p-2,p);
    }
    

    线性递推

    公式(inv[i]=(p-p/ i)inv[p\%i]\%p;)

    总结

    费马小定理真的好用多了,前面的看不看吧

  • 相关阅读:
    python播放音频文件
    安装pyaudio
    给 python工程 打包并上传 PyPI (The Python Package Index)
    python怎么import自己写的包
    pip源使用国内镜像
    Git和GitHub
    nginx的日志轮转
    ab接口压力测试工具
    nginx 性能优化
    https协议
  • 原文地址:https://www.cnblogs.com/bangdexuanyuan/p/13374635.html
Copyright © 2011-2022 走看看