• 求逆元


    #include<bits/stdc++.h>
    using namespace std;
    //求逆元,方法是费马小定理,还有一种更快的线性算法
    long long mod=1000000007L;
    int pow_mod(int x,int y,int c){
        if(y==0) return 1;
        int q=pow_mod(x,y/2,c)%c;
        if(y&1) return (q*q*x)%c;
        else return (q*q)%c;
    }
    int ni1(int a,int b){
        //a%b的逆
        //已知费马小定理 a^(b-1)%b==1 b为素数
        //那么 a^(b-2)*a%b==1 ,所以 a mod b的逆是a(b-2)
        //因为求的是模几逆,肯定是,这样不容易溢出
        return pow_mod(a,b-2,b);
    }
    //当然如果,就直接调用pow_mod
    //如果求一堆数的逆,有一个线性算法更快,根据递推式.png
    int inv[10001],sum=1000;
    void ni2(int p){
        inv[1]=1;
        for(int i=2;i<=sum;i++){
            inv[i]=(p-p/i)*inv[p%i]%p;
            cout<<i<<" de inv shi "<<inv[i]<<endl;
        }
    }
    //上式可用于阶乘求逆
    // ine[i]=(mod-(mod/i)*ine[mod%i])%mod; i的逆
    // jcc[i]=jcc[i-1]*ine[i]%mod; 阶乘的逆
    //即ab的逆=a的逆*b的逆,因为模运算规律,乘法可加mod,而且逆也是一个数。
    
    int main()
    {
        cout<<ni1(2,5)<<endl;
        ni2(5);
        return 0;
    }
  • 相关阅读:
    线程私有关键字配合static使用
    对定义局部变量位置的思考
    获取文件的md5值
    JNI接口的整理
    数兔子问题
    使用XML布局文件和java代码混合控制UI界面
    应用程序类型
    android组成
    封装
    接口
  • 原文地址:https://www.cnblogs.com/MorrowWind/p/13056572.html
Copyright © 2020-2023  润新知