uestc 1072 a ^ b
a ^ b
Time Limit: 1000 ms Memory Limit: 65535 kB Solved: 334 Tried: 2153
Description
求a的b次方后四位。
Input
输入的第一行是T(不超过1000)。T表示测试部分的个数,每一部分都要求单独计算并按照要求输出结果。 接下来是每个测试部分。第一行给出a b,0 < a,b <= 1000000000。
Output
对于每个测试部分,请输出每个问题的正确答案的最后四位,如果不足四位请前面补0。
Sample Input
2
2 1
3 10
Sample Output
0002
9049
Source
zhymaoiing
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 5 typedef long long LL; 6 LL mod=10000; 7 8 9 LL pow_sum1(LL a,LL b) 10 { 11 LL ans=0; 12 a=a%mod; 13 while(b) 14 { 15 if(b&1) 16 { 17 ans=ans+a; 18 if(ans>=mod) 19 ans=ans-mod; 20 } 21 b=b>>1; 22 a=a<<1; 23 if(a>=mod) 24 a=a-mod; 25 } 26 return ans; 27 } 28 29 LL pow_sum2(LL n,LL m) 30 { 31 LL ans=1; 32 33 n=n%10000; 34 while(m) 35 { 36 if(m&1) 37 { 38 ans=pow_sum1(ans,n); 39 } 40 n=pow_sum1(n,n); 41 m=m>>1; 42 } 43 return ans; 44 } 45 46 int main() 47 { 48 LL T,n,m; 49 scanf("%lld",&T); 50 while(T--) 51 { 52 scanf("%lld%lld",&n,&m); 53 n=pow_sum2(n,m); 54 if(n<10)printf("000"); 55 else if(n<100) printf("00"); 56 else if(n<1000) printf("0"); 57 printf("%lld\n",n); 58 } 59 return 0; 60 }