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 }

 

posted @ 2013-10-24 21:29  芷水  阅读(242)  评论(0编辑  收藏  举报