上面是题目链接
今天是一个特殊的日子,很荣幸能在这一天用打代码来庆祝这一特殊的节日。
坐标:老师办公室
这道题很简单,快速幂就够。
事实上,对于很大的a我们没必要去求
因为:
ab=(a%p)b (mod p)
所以,对于很大的a,把1到10000的求一下即可。
代码如下:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int mod=10000;
int t;
int a,b;
int val[10005];
int fpow(int x,int n){
int res=1;
while(n>0){
if(n%2==1){
res=res*x%mod;
}
x=x*x%mod;
n>>=1;
}
return res;
}
int main(){
scanf("%d",&t);
while(t--){
scanf("%d%d",&a,&b);
val[0]=0;
val[1]=1;
for(int i=2;i<=min(a,mod);i++){
val[i]=fpow(i,b);
}
int ans=0;
if(a<mod){
for(int i=1;i<=a;i++){
ans=(ans+val[i])%mod;
}
}else{
int tim=a/mod%mod;
int left=a%mod;
int get=0;
for(int i=1;i<=mod;i++){
ans=(ans+val[i])%mod;
if(i<=left){
get=(get+val[i])%mod;
}
}
ans=(ans*tim+get)%mod;
}
printf("%d\n",ans);
}
return 0;
}