题目链接:http://acm.henu.edu.cn/contest/problem?id=2&pid=4
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
//#include <map>
//#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <string>
#include <algorithm>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define mod 1000000007
#define clean(a,b) memset(a,b,sizeof(a))
const int N=1e4+5;
int n,k;
int T;
ll a2[N];
ll a3[N];
ll a4[N];
ll a5[N];
ll quick(int a,int n)
{
ll ans=1,t=a;
while(n)
{
if(n&1)
ans=(ans*t)%mod;
t=(t*t)%mod;
n/=2;
}
return ans%mod;
}
int main(int argc, const char * argv[]) {
for(int i=1;i<=10000;i++)
{
a2[i]=quick(i, 2);
a3[i]=quick(i, 3);
a4[i]=quick(i, 4);
a5[i]=quick(i, 5);
}
cin>>T;
while(T--)
{
cin>>n>>k;
if(k==0)
{
printf("%d\n",n);
}
if(k==1)
{
printf("%d\n",(((1+n)*n)/2)%mod);
}
if(k==2)
{
ll ans=0;
for(int i=1;i<=n;i++)
ans+=a2[i];
printf("%lld\n",ans%mod);
}
if(k==3)
{
ll ans=0;
for(int i=1;i<=n;i++)
ans+=a3[i];
printf("%lld\n",ans%mod);
}
if(k==4)
{
ll ans=0;
for(int i=1;i<=n;i++)
ans+=a4[i];
printf("%lld\n",ans%mod);
}
if(k==5)
{
ll ans=0;
for(int i=1;i<=n;i++)
ans+=a5[i];
printf("%lld\n",ans%mod);
}
}
return 0;
}