本题是求A^B的最后三位数表示的整数,快速幂嘛,当然就是快速的求幂,时间复杂度可以达到log级。比如说本题,B的范围是10的5次方,那么计算17次左右就可以得到答案了,即使范围到了10的9次方也就是30多次而已。
其实这个的要点就是位运算和二进制,比如说计算x^45
(45)10=(101101)2
x^45 = x^32 * x^8 * x^4 * x^1
很明显计算出x,x^2,x^4,x^8...即可,位运算很容易做到这一点。
#include<stdio.h>
const int mod=10000;
int ans(int a,int b)
{
int ret=1;
while(b)
{
if(1&b)ret=ret*a%mod;
//printf("ret%d\n",ret);
a=a*a%mod;
//printf("a%d\n",a);
b>>=1;
}
return ret;
}
int main()
{
int A,B;
while(scanf("%d%d",&A,&B)==2)
{
if(A==0&&B==0)return 0;
printf("%d\n",ans(A,B)%1000);
}
return 0;
}