hdu4704 循环节+快速幂

来源:互联网 发布:淘宝开店用手机可以吗 编辑:程序博客网 时间:2024/05/20 19:31

求循环节的方法:

void getj(){    ll a1=2,a2=4;    for(ll i=2;;i++)    {        a1=(2*a1)%Mod;        a2=(2*a2)%Mod;        if(a1==2&&a2==4)        {            cout<<i-1<<endl;            break;        }    }}
代码:

#include<iostream>#include<cstdio>#include<vector>#include<string>#include<queue>#include<cstring>#define maxn 10005#define INF 0xfffffff#define mem(a,b) memset(a,b,sizeof(a))#define FOR(i,s,t) for(int i=s;i<=t;i++)#define ull unsigned long long#define ll __int64#define Mod 1000000007#define mj 500000003using namespace std;int c[maxn];ll POW(ll x,ll n,ll mod){    ll ret=1;    while(n)    {        if(n&1)        {            ret=(ret*x)%mod;        }        n/=2;        x=(x*x)%mod;    }    return ret;}ll fun(char *s){    ll ret=0;    ll l=strlen(s);    for(int i=0;i<l;i++)    {        ret=(ret+(s[i]-'0')*POW(10,l-i-1,mj))%mj;    }    return ret;}void getj(){    ll a1=2,a2=4;    for(ll i=2;;i++)    {        a1=(2*a1)%Mod;        a2=(2*a2)%Mod;        if(a1==2&&a2==4)        {            cout<<i-1<<endl;            break;        }    }}int main(){    ll n;    while(scanf("%s",s)!=EOF)    {        n=fun(s);        printf("%I64d\n",POW(2,n-1+mj,Mod));    }    return 0;}


原创粉丝点击