hdu 4704(费马小定理)

题目链接: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

 

你可能感兴趣的:(HDU)