2017 9 27 模拟赛T1

题意简述:

求1—n中所有数的k次方的和,答案对1234567891取模。

样例输入格式:

一行,两个整数n,k

样例输出格式:

一个整数,即所求的和。

数据范围:n<10^9,k<100

代码来自标程。

#include<cstdio>
long long n,k,p=1234567891,tmp=1;
long long a[105][105],ans;
long long pow(long long x,long long y)
{
    long long re=1;
    for(;y;y>>=1)
    {
        if(y&1) re=re*x%p;
        x=x*x%p;
    }
    return re;
}
int main()
{
    scanf("%lld%lld",&n,&k);
    for(int i=1;i<=k+1;i++) a[0][i]=(a[0][i-1]+pow(i,k))%p;
    for(int i=1;i<=k+1;i++)
    {
        for(int j=i;j<=k+1;j++)    a[i][j]=(a[i-1][j]-a[i-1][j-1]+p)%p;
    }
    for(int i=0;i<=k+1;i++)
    {
        ans=(ans+a[i][i]*tmp)%p;
        tmp=tmp*(n-i)%p*pow(i+1,p-2)%p;
    }
    printf("%lld",ans);
    return 0;
}
原文地址:https://www.cnblogs.com/zeroform/p/7603046.html