zoukankan      html  css  js  c++  java
  • AcWing 213. 古代猪文 数学知识

    传送门

    题目描述:

    给定整数n,q,计算 $q^{sum_{d|n} C_{n}^{d}}$ mod 999911659

    输入格式

    输入包括一行,包含两个整数n,q,用一个空格隔开。

    输出格式

    输出包括一行,包含一个整数表示最终结果。

    数据范围

    1n,q109 

    输入样例:

    4 2
    

    输出样例:

    2048
    

     提示:对于n的每一个正因数d,都有一个的值,将它们全部加起来得到的和就是

    题解:经典题,用到的数学知识比较多。

    代码: 

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    const int N = 4e4 + 10;
    const ll mod = 999911659;
    ll fac[N] = {1},n,q,b[5];
    int a[5] = {0,2,3,4679,35617};
    ll qp(ll a,ll b) {
        ll ans = 1;
        for (;b;b>>=1,a=a*a%mod) 
            if (b&1) ans = ans * a %mod;
        return ans;
    }
    void exgcd(ll a,ll b,ll &x,ll &y) {
        if (b == 0) {
            x = 1;
            y = 0;
            return ;
        }
        exgcd(b,a%b,y,x);
        y -= (a/b)*x;
    }
    ll getinv(ll a,ll b) {
        ll x,y;
        exgcd(a,b,x,y);
        return (x%b+b)%b;
    }
    ll lucas(ll x,ll p) {
        ll ans = 1;
        for (ll y = n;x;x/=p,y/=p) {
            ll a = x%p, b = y%p;
            ans = ans*fac[b]%p*getinv(fac[a],p)%p*getinv(b<a?0:fac[b-a],p)%p;
        }
        return ans;
    }
    int main(){
        scanf("%lld%lld",&n,&q);
        q%=mod;
        if(!q) {
            printf("0
    ");
            return 0;
        }
        ll mod1 = mod -1,ans = 0,x,y;
        for (ll i = 1; i <= 35617; i++) fac[i] = fac[i-1]*i%mod1;
        for (ll i = 1; i*i<=n; i++)
            if (n%i==0) {
                for (int j = 1; j <= 4; j++)
                    b[j] = (b[j]+lucas(i,a[j]))%a[j];
                if (i*i!=n) for (int j = 1; j <= 4; j++)
                    b[j] = (b[j]+lucas(n/i,a[j]))%a[j];
            }
        for (int i = 1; i <= 4; i++){
            exgcd(mod1/a[i],a[i],x,y);
            ans = (ans+x*(mod1/a[i])%mod*b[i])%mod1;
        }
        ans = (ans+mod1)%mod1;
        ans = qp(q,ans);
        printf("%lld
    ", ans);
        return 0;
    }
    View Code
  • 相关阅读:
    ABP 开发(一)
    转发: Angular装饰器
    AJAX上传文件到服务器
    转:system.Security.Cryptography C# 加密和解密
    asp.net mvc5 step by step(四)——关于Controller的ActionResult
    asp.net mvc5 step by step(三)—— Entity Framework Database First
    asp.net mvc5 step by step(二)——Data Annotations(data 注释)
    项目中使用protobuf
    架构私用Nuget服务器
    dockerfile语法
  • 原文地址:https://www.cnblogs.com/l999q/p/11335896.html
Copyright © 2011-2022 走看看