汉诺塔

 1 #include <stdio.h>
 2 #define MOD 1000000
 3 
 4 int pow_mod(int m,int n)
 5 {
 6    long long int t;
 7    if(n==0) return 1%MOD;
 8    else if(n==1) return 2%MOD;
 9    else{
10    t = pow_mod(m,n/2);//递归调用,采用二分递归算法,,注意这里 n/2会带来奇偶性问题
11    t = (t * t)%MOD;//二分,乘上另一半再求模
12    if(n&1) t = t*m%MOD;// n 是奇数,因为 n/2 还少乘了一次 m
13    return t;
14    }
15 }
16 int main()
17 {
18     int cases;
19     scanf("%d",&cases);
20     while(cases--)
21     {
22         int m;
23         scanf("%d",&m);
24         printf("%d\n",pow_mod(2,m)-1);
25     }
26     return 0;
27 }

 

posted @ 2013-08-22 17:19  hpu张亚飞  阅读(171)  评论(0编辑  收藏  举报