规律 欧拉定理:
找规律 2^n-1 ,n 非常大用欧拉定理
Sum
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1465 Accepted Submission(s): 622
Problem Description
Sample Input
2
Sample Output
2
Hint
1. For N = 2, S(1) = S(2) = 1. 2. The input file consists of multiple test cases.
Source
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long int LL;
const LL mod=1e9+7;
const LL phi=1e9+6;
char str[200000];
LL quickpow(LL x)
{
if(x==0LL) return 1LL;
LL e=2,ret=1;
while(x)
{
if(x%2)
ret=(ret*e)%mod;
e=(e*e)%mod;
x/=2LL;
}
return ret;
}
int main()
{
while(scanf("%s",str)!=EOF)
{
int len=strlen(str);
/// N - 1
if(str[len-1]>'0')
{
str[len-1]--;
}
else
{
int p=len-1;
while(str[p]=='0')
{
str[p]='9';
p--;
}
str[p]--;
}
LL ret=0;
for(int i=0;i<len;i++)
{
ret=ret*10LL+str[i]-'0';
while(ret>=phi)
ret-=phi;
}
cout<<quickpow(ret)<<endl;
}
return 0;
}