You are encountered with a traditional problem concerning the sums of powers.
Given two integers
n
n and
k
k. Let
f(i)=ik
f(i)=ik, please evaluate the sum
f(1)+f(2)+...+f(n)
f(1)+f(2)+...+f(n). The problem is simple as it looks, apart from the value of
n
nin this question is quite large.
Can you figure the answer out? Since the answer may be too large, please output the answer modulo
109+7
109+7.
Input
The first line of the input contains an integer
T(1≤T≤20)
T(1≤T≤20), denoting the number of test cases.
Each of the following
T
T lines contains two integers
n(1≤n≤10000)
n(1≤n≤10000) and
k(0≤k≤5)
k(0≤k≤5).
Output
For each test case, print a single line containing an integer modulo
109+7
109+7.
Sample Input
3
2 5
4 2
4 1
Sample Output
33
30
10
这个题的数据量是很大的,因此每求一次a^b,都要进行取模,所以我们把pow()函数在这儿重新写 一次,同时,最后的输出结果也要取模。
#include <iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const int N=
1000000000+
7;
long long pow1(int a,int b)
{
long long p=
1;
for(
int i=
1;i<=b;i++)
{
p*=a;
p%=N;
}
return p;
}
int main()
{
int T;
scanf(
"%d",&T);
while(T--)
{
long long a,b,sum=
0;
scanf(
"%lld%lld",&a,&b);
for(
int i=
1;i<=a;i++)
sum+=pow1(i,b);
printf(
"%lld\n",sum%N);
}
return 0;
}