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
Source
快速幂的裸
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
#define ll long long
ll mod = 1e9+7;
ll a[10005][10];
ll mul(ll a,ll b){
ll res=1;
while(b){
if(b%2){
res=(res*a)%mod;
}
a=(a*a)%mod;
b/=2;
}
return res;
}
int main(){
int t;
cin>>t;
for(int i=0;i<=5;i++){
for(int j=1;j<=10001;j++){
a[j][i]=(a[j-1][i]+mul((ll)j,(ll)i))%mod;
}
}
while(t--){
int n,m;
cin>>n>>m;
cout<<a[n][m]<<endl;
}
return 0;
}