• 乘法逆元(模数为质数,费马小定理)


    最近做题经常会遇到大佬出题为了避免精度问题要求将答案模一个大质数.然后我就一脸懵逼的连续爆了好几场零.终于下定决心来学一下什么是乘法逆元.其实又感觉不是很难(但为啥比赛就写不出来qwq)

     

        铺垫知识:

     费马小定理:

       

     反正就当会证了,开始推导:

     首先易知:

      

       这个不管在正常意义下还是模算术意义下都是正确的

      所以:

                                (1)

     然后我们知道:

       

     拆分一下:

                            (2)

     联立(1)(2)就得到了

     在模p意义下

      

     即a的逆元为当然p必须是整数.

     但p很大啊...怎么算?

     当然是kasumi()

     也就是快速幂,不过基于某些原因我程序中会以kasumi呈现

        那怎么求mod p?

       

     所以就可以打程序了!

       代码如下:(求a/b%mod的值)

       

    #include<cstdio>
    using namespace std;
    
    long long a,b,ans,mod;
    
    long long kasumi(long long x,long long t)
    {
        x=x%mod;
        long long ans=1;
        while(t)
        {
            if(t&1)
            {
                ans=ans*x%mod;
            }
            t>>=1;
            x=x*x%mod;
        }
        return ans;
    }
    
    int main()
    {
        scanf("%lld%lld%lld",&a,&b,&mod);
        b=kasumi(b,mod-2);
        ans=a*b%mod;
        printf("%lld",ans);
    }

    每天刷题身体棒棒!

  • 相关阅读:
    ThetaSome_ThetaAll子查询
    BMP文件解析
    IN-子查询
    由顶点坐标计算任意多边形面积
    Java入门——多态
    使用Notepad++开发Java程序
    C#利用VUDP.cs开发网络通讯应用例程
    C#利用Vini.cs操作INI文件
    RC522射频卡读写模块驱动(仅读取)
    Tupper自我指涉公式生成器
  • 原文地址:https://www.cnblogs.com/stxy-ferryman/p/7485467.html
Copyright © 2020-2023  润新知