Easy Summation
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 0 Accepted Submission(s): 0
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当时一激动没考虑到直接pow超出了longlong范围wa了两发#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<string> #include<queue> #include<stack> #include<vector> #include<algorithm> using namespace std; #define ll long long #define ms(a,b) memset(a,b,sizeof(a)) const int M=1e5+10; const int inf=0x3f3f3f3f; int i,j,k,n,m; const ll mod=1e9+7; int main() { int T; scanf("%d",&T); while(T--){ scanf("%d%d",&n,&k); ll ans=0; for(int i=1;i<=n;i++){ ll sum=1; for(int j=1;j<=k;j++) sum*=i,sum%=mod; ans+=sum; ans%=mod; } printf("%lld\n",ans); } return 0; }