zoukankan      html  css  js  c++  java
  • 古代猪文

    数论模板混合好题

    #include<bits/stdc++.h>
    #define re return
    #define ll long long
    #define inc(i,l,r) for(int i=l;i<=r;++i)
    using namespace std;
    template<typename T>inline void rd(T&x)
    {
        char c;bool f=0;
        while((c=getchar())<'0'||c>'9')if(c=='-')f=1;
        x=c^48;
        while((c=getchar())>='0'&&c<='9')x=x*10+(c^48);
        if(f)x=-x;
    }
    
    const int maxn=36000;
    ll jc[maxn],inv[maxn],jcinv[maxn],N,G;
    
    ll C(int n,int m,int mod)//组合数 
    {
        if(m>n)re 0;
        re jc[n]*jcinv[n-m]%mod*jcinv[m]%mod;
    }
    
    ll LUCAS(int n,int m,int mod)//卢卡斯定理 
    {
        if(!m)re 1;
        re C(n%mod,m%mod,mod)*LUCAS(n/mod,m/mod,mod)%mod;
    }
    
    inline void Get_math(int mod)
    {
        //得到当前模数下的阶乘,阶乘逆元 
        jcinv[0]=jcinv[1]=inv[1]=jc[1]=jc[0]=1;
        inc(i,2,mod)
        {
            inv[i]=(mod-mod/i)*inv[mod%i]%mod;
            jcinv[i]=jcinv[i-1]*inv[i]%mod;
            jc[i]=jc[i-1]*i%mod;
        }
    }
    
    inline ll Get_crt(int mod)
    {
        
        ll sum=0;
        Get_math(mod);
        inc(i,1,sqrt(N))
        if(N%i==0)//寻找整除N的K 
        {
            sum=(sum+LUCAS(N,i,mod))%mod;
            if(i*i!=N)//防止重复 
            sum=(sum+LUCAS(N,N/i,mod))%mod;
        }
        re sum;
    }
    
    
    inline ll pow(ll a,ll x,ll mod)
    {
        if(!a)re 0;
        ll ret=1;
        while(x)
        {
            if(x&1)ret=ret*a%mod;
            a=a*a%mod;
            x>>=1;
        }
        re ret;
    }
    
    
    int main()
    {
        freopen("in.txt","r",stdin);
        ll a1,a2,a3,a4,x,M=999911658;
        ll inv1,inv2,inv3,inv4;
        rd(N),rd(G);    
        
        //得到中国剩余定理的X=(请当做同余)A(mod p)中的A 
        a1=Get_crt(2); 
        a2=Get_crt(3);
        a3=Get_crt(4679);
        a4=Get_crt(35617);
        //剩余定理求解 
        inv1=pow(M/2,2-1,M)*a1;
        //Mi*(Mi^(p-2))*ai前面可以合并
        //并对M取模得到最小正整数解 
        inv2=pow(M/3,3-1,M)*a2;
        inv3=pow(M/4679,4679-1,M)*a3;
        inv4=pow(M/35617,35617-1,M)*a4;
        
         printf("%lld",pow(G%(M+1),(inv1+inv2+inv3+inv4)%M,M+1));
        re 0;
    }
  • 相关阅读:
    jQuery中的promise实例
    你可能不需要单页面应用
    单页面和多页面应用场景总结
    ES6的模块暴露与模块引入
    export default 和 export的区别
    Android中获取网页表单中的数据实现思路及代码
    Pojo和JavaBean的区别(转载)
    MyEclipse默认编码为GBK,修改为UTF8的方法
    JSP中getParameter和getAttribute区别
    内部跳转(请求转发)和外部跳转(重定向)的区别?
  • 原文地址:https://www.cnblogs.com/lsyyy/p/11569495.html
Copyright © 2011-2022 走看看