hdu 4704(费马小定理)

来源:互联网 发布:mac php protobuf 编辑:程序博客网 时间:2024/05/29 03:00

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4704

思路:一道整数划分题目,不难推出公式:2^(n-1),根据费马小定理:(2,MOD)互质,则2^(p-1)%p=1,于是我们可以转化为:2^(n-1)%MOD=2^((n-1)%(MOD-1))%MOD,从而用快速幂求解。

 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 #define MOD 1000000007 7  8 char str[100100]; 9 long long Pow(long long n)10 {11     long long p=1,q=2;12     while(n){13         if(n&1){14             p=p*q%MOD;15         }16         n>>=1;17         q=q*q%MOD;18     }19     return p;20 }21 22 int main()23 {24     while(~scanf("%s",str)){25         int len=strlen(str);26         long long n=0;27         for(int i=0;i<len;i++){28             n=(n*10+str[i]-'0')%(MOD-1);29         }30         printf("%I64d\n",Pow(n-1));31     }32     return 0;33 }
View Code

 

0 0
原创粉丝点击