开始的时候死活时没有看懂题目是什么意思,光是题意就看了半个多小时,还好最后看懂了
题目网址: http://acm.hdu.edu.cn/showproblem.php?pid=4704
其实就是用到了小费马定理a^(p-1) ≡ 1 (mod p)
#include <iostream> #include <cstdio> #include <cstring> using namespace std; __int64 pow(__int64 b){ __int64 a=2; __int64 ans=1; while(b>0){ if(b&1) //判断是否为奇数,相当于 if(b%2==1) ans=(ans*a)%1000000007; a=(a*a)%1000000007; b=b>>1; //二进制向右移一位,相当于 b=b/2; } return ans; } int main () { char str[100100]; while(~scanf("%s",str)) { __int64 sum=0;//str[0]-'0'; int len=strlen(str);//注意这里如果是没有Len的话就会超时 for(int i=0; i<len; i++) sum=(sum*10+str[i]-'0') % 1000000006;//小费马定理 printf("%I64d\n",pow(sum-1)); } return 0; }