题意:就是求自然数幂的和。注意平常求自然数幂的和当然是用伯努利数,但是本题n很大,k很小,用伯努利数来做会内存超限。
用快速幂暴力求即可。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1e9+7;
ll powmod(ll a,ll b)
{
a=a%mod;
ll res=1;
while(b)
{
if(b&1)
res=res*a%mod;
a=a*a%mod;
b>>=1;
}
return res;
}
int main()
{
ll n,i,k,t;
ll sum;
scanf("%lld",&t);
while(t--)
{
scanf("%lld%lld",&n,&k);
sum=0;
for(i=1;i<=n;i++)
{
sum=(sum+powmod(i,k))%mod;
}
printf("%lld\n",sum);
}
}
//人一我百,人百我万
//时间