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 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+7.
Input
The first line of the input contains an integer T(1≤T≤20), denoting the number of test cases.
Each of the following T lines contains two integers n(1≤n≤10000) and k(0≤k≤5).
Output
For each test case, print a single line containing an integer modulo 10 9+7.
Sample Input
3
2 5
4 2
4 1
Sample Output
33
30
10
分析:
由于数据太大 最好用long long类型 最后结果要对1000000007取模
代码总览:
#include <stdio.h>
#define N 1000000007
long long maxx(long long x,long long n)
{
long long t=1,i;
for(i=1;i<=n;i++)
{
t=t*x;
t=t%N;//防止数据过大
}
return t;
}
int main()
{
long long t,a,b,i,sum;
scanf("%lld",&t);
while(t--){
sum=0;
scanf("%lld %lld",&a,&b);
for(i=1;i<=a;i++)
{
sum=sum+maxx(i,b);
sum=sum%N;//防止数据过大
}
printf("%lld\n",sum);
}
return 0;
}