首页 > 代码库 > 【HDOJ】4704 Sum

【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 }