2019 计蒜之道 第三场 D(找规律+欧拉降幂)

题目链接:https://nanti.jisuanke.com/t/38352

先找出规律

由于n非常大,因此我们需要用到欧拉降幂

由于1e9+7为素数,故phi(1e9+7)=1e9+6

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int mod=1e9+7,amod=1e9+6;
char a[100010];
LL quick(LL a,LL b)
{
    LL res=1;
    while(b)
    {
        if(b&1)res=(res*a)%mod;
        b>>=1;
        a=(a*a)%mod;
    }
    return res;
}
int main()
{
    while(~scanf("%s",a))
    {
        if(a[0]=='0')break;
        LL s=0;
        for(int i=0;i<strlen(a);i++)
        {
            int t=a[i]-'0';
            s=((s*10)%amod+t%amod)%amod;
        }
        LL sum=(quick(4,s-1)+quick(2,s-1))%mod;
        printf("%lld\n",sum);
    }
    return 0;
}

 

posted @ 2019-06-03 22:12  灰灰烟影  阅读(221)  评论(0编辑  收藏  举报