龟速乘

我们当然都知道,快速幂是个好东西。然鹅快速幂也有bug——如果模数比较大,一乘就容易爆long long,那么就需要使用龟速乘了。

ll gui_cheng(ll a,ll x,ll mod)
{
    ll ans=0;
    while(x)
    {
        if(x&1) ans=(ans+a)%mod;
        a=(a+a)%mod;
        x>>=1;
    }
    return ans;
}
ll gui_pow(ll a,ll x,ll mod)
{
    ll ans=1;
    while(x)
    {
        if(x&1) ans=gui_cheng(ans,x,mod)%mod;
        a=a*a%mod;
        x>>=1;
    }
    return ans;
}

 

posted @ 2019-03-06 17:46  yyys  阅读(876)  评论(0编辑  收藏  举报