• 古代猪文:数论大集合:欧拉定理,exgcd,china,逆元,Lucas定理应用


    /*
    古代猪文:Lucas定理+中国剩余定理 
    999911658=2*3*4679*35617
    Lucas定理:(m,n)=(sp,tp)(r,q) %p
    中国剩余定理:x=sum{si*Mi*ti}+km 
    先求出sum{C(d,n)}%p[i]=a[i] 
    */
    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long 
    #define mod 999911659
    #define maxn 100005
    ll m[4]={2,3,4679,35617};
    ll f[4][maxn],a[4],d[maxn];
    ll exgcd(ll a,ll b,ll &x,ll &y){
        if(b==0){x=1,y=0;return a;}
        ll d=exgcd(b,a%b,x,y);
        ll z=x;x=y,y=z-a/b*y;
        return d;
    }
    ll inv(ll a,ll Mod){
        ll x,y;
        exgcd(a,Mod,x,y);
        return (x+Mod)%Mod;
    }
    ll C(int i,ll n,ll k,ll p){return f[i][n]*inv(f[i][k]*f[i][n-k]%p,p)%p;}
    ll lucas(int i,ll n,ll k,ll p){
        int res=1;
        while(n&&k){
            res=res*C(i,n%p,k%p,p)%p;
            if(res==0)return 0;
            n/=p,k/=p;
        }
        return res;
    }
    ll Pow(ll x,ll n,ll Mod){
        ll res=1;
        while(n){
            if(n%2)res=res*x%Mod;
            n>>=1;x=x*x%Mod;
        }
        return res;
    }
    ll china(int n,ll a[],ll m[]){
        ll M=1,res=0;
        for(int i=0;i<n;i++)M*=m[i];
        for(int i=0;i<n;i++){
            ll w=M/m[i],x,y;
            exgcd(w,m[i],x,y);
            res=(res+x*w*a[i])%M;
        }
        return (res+M)%M;
    }
    
    int main(){
        ll n,g;
        cin>>n>>g;
        if(g==mod){puts("0");return 0;}    
        int tot=0;
        for(int i=1;i*i<=n;i++)
            if(n%i==0){//求n的所有质因子 
                if(i*i==n)d[tot++]=i;
                else d[tot++]=i,d[tot++]=n/i;
            }
        for(int i=0;i<4;i++){
            f[i][0]=1;
            for(int j=1;j<m[i];j++)
                f[i][j]=f[i][j-1]*j%m[i];
        } 
        for(int i=0;i<tot;i++)
            for(int j=0;j<4;j++)
                a[j]=(a[j]+lucas(j,n,d[i],m[j]))%m[j];;
        ll ans=china(4,a,m);
        cout<<Pow(g,ans,mod);
    }
  • 相关阅读:
    0509操作系统
    0508数据结构
    计算机组成原理
    0510数据库--基础知识
    0508操作系统
    0507数据结构
    0506操作系统和数据结构
    机试题201702x--不定长数组的输入
    机试题201805--输入n个字符串,将其反转输出
    SSH框架--Hibernate配置
  • 原文地址:https://www.cnblogs.com/zsben991126/p/10623016.html
Copyright © 2020-2023  润新知