【HDOJ】4704 Sum

数学题。f(n) = 2^(n-1) mod (1e9+7)。

 1 #include <cstdio>
 2 
 3 #define MAXN 100005
 4 
 5 char buf[MAXN];
 6 __int64 phi = 1e9+6;
 7 __int64 mod = 1e9+7;
 8 
 9 __int64 power2(__int64 n) {
10     __int64 ret = 1, base = 2;
11 
12     --n;
13     while (n) {
14         if (n & 1)
15             ret = ret * base % mod;
16         base = base*base%mod;
17         n >>= 1;
18     }
19     return ret;
20 }
21 
22 int main() {
23     __int64 tmp;
24     __int64 i, j;
25 
26     while (scanf("%s", buf) != EOF) {
27         tmp = 0;
28         for (i=0; buf[i]; ++i) {
29             tmp = 10*tmp + (buf[i]-'0');
30             tmp %= phi;
31         }
32         tmp += phi;
33         tmp = power2(tmp);
34         printf("%I64d\n", tmp);
35     }
36 
37     return 0;
38 }

posted on 2014-07-23 22:44  Bombe  阅读(159)  评论(0编辑  收藏  举报

导航