B - Easy Summation
You are encountered with a traditional problem concerning the sums of powers.
Given two integers �n and �k. Let �(�)=��f(i)=ik, please evaluate the sum �(1)+�(2)+...+�(�)f(1)+f(2)+...+f(n). The problem is simple as it looks, apart from the value of �n in this question is quite large.
Can you figure the answer out? Since the answer may be too large, please output the answer modulo 109+7109+7.
Input
The first line of the input contains an integer �(1≤�≤20)T(1≤T≤20), denoting the number of test cases.
Each of the following �T lines contains two integers �(1≤�≤10000)n(1≤n≤10000) and �(0≤�≤5)k(0≤k≤5).
Output
For each test case, print a single line containing an integer modulo 109+7109+7.
Sample
Inputcopy | Outputcopy |
|
|
#include <iostream>
using namespace std;
typedef long long LL;
const LL N = 1e9+7;
LL n,k,i,sum;
LL ksm(LL a,LL b)
{
LL ans = 1;
while(b)
{
if(b&1)
{
ans = (ans*a)%N;
}
a = (a*a)%N;
b>>= 1;
}
return ans;
}
int main()
{
int t;
cin>>t;
while(t--)
{
sum = 0;
cin>>n>>k;
for(i = 1;i<=n;i++)
{
sum = (sum + ksm(i,k))%N;
}
cout<<sum<<endl;
}
return 0;
}