Problem Description
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 .
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) .
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
109+7
.
Sample Input
3 2 5 4 2 4 1
Sample Output
33 30 10
/**
题目:1005 Easy Summation
链接:http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1005&cid=772
题意:给定两个数n,k。求1的k次方 + 2的k次方 + ....+ n的k次方。结果会很大,所以要对10的9次方+7取模
思路:题意比较明朗,把1-n的每个数的k次方加起来,求幂的时候使用快速幂,值得一提的是数非常大,因此在快速幂求幂的过程中, 每一步也要对10的9次方+7取模
**/
#include <iostream>
#include <map>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
题目:1005 Easy Summation
链接:http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1005&cid=772
题意:给定两个数n,k。求1的k次方 + 2的k次方 + ....+ n的k次方。结果会很大,所以要对10的9次方+7取模
思路:题意比较明朗,把1-n的每个数的k次方加起来,求幂的时候使用快速幂,值得一提的是数非常大,因此在快速幂求幂的过程中, 每一步也要对10的9次方+7取模
**/
#include <iostream>
#include <map>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
long long pow2(long long a,int b)
{
long long r=1,base=a;
while(b)
{
if(b&1)
{
r*= base;
r%=1000000007;
}
base*=base;
base%=1000000007;
b>>=1;
}
return r;
}
int main()
{
int qq;
scanf("%d",&qq);
while(qq--)
{
long long t=0;
int n,k;
cin>>n>>k;
for(int i=1; i<=n; i++)
{
t=(t+pow2(i,k))%1000000007;
}
printf("%lld\n",t);
}
return 0;
}
{
long long r=1,base=a;
while(b)
{
if(b&1)
{
r*= base;
r%=1000000007;
}
base*=base;
base%=1000000007;
b>>=1;
}
return r;
}
int main()
{
int qq;
scanf("%d",&qq);
while(qq--)
{
long long t=0;
int n,k;
cin>>n>>k;
for(int i=1; i<=n; i++)
{
t=(t+pow2(i,k))%1000000007;
}
printf("%lld\n",t);
}
return 0;
}