zoukankan      html  css  js  c++  java
  • 【总结】四种逆元的求法

    前言

    逆元是一直以来想补的坑了

    求逆元 即求 x 满足 a/b % mod =a*x%mod =1%mod

    费马小定理

    限制:mod为质数

    #include<bits/stdc++.h>
    using namespace std;
    int b,mod; 
    inline int ksm(int a,int b)
    {
        int ret=1;
        while(b)
        {
            if(b&1)ret=(ret*a)%mod;
            a=(a*a)%mod;
            b>>=1;
        }
        return ret;
    }
    int main()
    {
        cin>>b>>mod;
        cout<<ksm(b,mod-2);
        return 0;
    }

    exgcd

    限制:b和mod互质

    #include<bits/stdc++.h>
    using namespace std;
    int b,x,y,mod,gcd; 
    inline int exgcd(int a,int b,int &x,int &y)
    {
        if(b==0)
        {
            x=1,y=0;
            return a;
        }
        int ret=exgcd(b,a%b,x,y);
        int t=x;x=y,y=t-(a/b)*y;
        return ret;
    }
    int main()
    {
        cin>>b>>mod;
        gcd=exgcd(b,mod,x,y);
        if(gcd!=1)printf("not exist
    ");
        else printf("%d
    ",(x%mod+mod)%mod);
        return 0;
    }

    数学变形

    限制:b能被a整除

    x=(a%(b*mod))/b

    公式递推

    限制:mod是质数

    逆元不存在的时候会输出0

    #include<bits/stdc++.h>
    using namespace std;
    #define N 3000030
    #define ll long long
    ll b,mod; 
    ll inv[N];
    int main()
    {
        scanf("%lld%lld",&b,&mod);
        inv[1]=1;
        for(ll i=2;i<=b;i++)
            inv[i]=(mod-mod/i)*inv[mod%i]%mod;
        for(ll i=1;i<=b;i++)
            printf("%lld
    ",inv[i]);
        return 0;
    }
  • 相关阅读:
    classpath详解
    xml详解
    pojo、po、dto、dao、bo区别
    事务的四种隔离级别
    spring相关知识点易错
    Orm
    100+个Java项目视频教程+源码+笔记,项目经验不用愁了!
    使用TM1629A芯片驱动米字数码管
    关于安装airflow遇到的问题
    Semver(语义化版本号)扫盲
  • 原文地址:https://www.cnblogs.com/NSD-email0820/p/9910344.html
Copyright © 2011-2022 走看看