O(1)快速乘,慢速乘,快速幂

快速乘

引自2009国家集训队论文:骆可强:《论程序底层优化的一些方法与技巧》 

O(1)快速乘,慢速乘,快速幂

 

代码://挺迷的,不知道为什么,好用就是了

ll fast_mult(ll a,ll b,ll mod)
{
    return (a*b-(ll)((long double)a/mod*b)*mod+mod)%mod;
}//ll为long long

快速幂

ll fpow(ll a,ll b,ll c)
{
    a%=c;
    ll ans=1;
    while(b)
    {
        if(b&1) ans=ans*a%c;
        a=a*a%c;
        b>>=1;
    }
    return ans%c;
}

慢速乘(快速加)

ll fmult(ll a,ll b,ll c)
{
    a%=c;
    ll ans=0;
    while(b)
    {
        if(b&1) ans=(ans+a)%c;
        a=(a+a)%c;
        b>>=1;
    }
    return ans%c;
}

 

上一篇:PTA-----求一批整数中出现最多的个位数字


下一篇:RSA解密