1. 程式人生 > >hdu 4704(費馬小定理)

hdu 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