题目:
打表S的公式sum(s) = 2^(n-1)
n非常大,a为2,MOD为质数,可用费马小定理进行加速,然后加速幂水过,费马做的不多,用此题记录模板。
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
const long long MOD = 1e9+7 ;
const long long N = 1e5+5;
using namespace std;
char str[N];
inline long long qpow(long long x,long long y,long long MOD)
{
long long ans=1,tem=x;
while(y)
{
if(y&1)ans = (ans*tem)%MOD;
tem = (tem*tem)%MOD;
y>>=1;
}return ans ;
}
inline long long getPow()
{
long long value = 0;
for(int i=0;str[i]!='\0';i++)
{
value =( value*10 + (str[i]-'0') ) % (MOD-1);
}return value ;
}
int main()
{
while(scanf("%s",str)==1)
{
long long pow = getPow();
printf("%I64d\n",qpow(2,pow-1,MOD));
}
}