快速乘法+快速幂

快速乘法应用于两个很大的数相乘取模问题

快速乘和快速幂原理一样
主要用于是64bit整数乘法时会爆longlong但是写高精度又太麻烦的情况

模板为:

ll mul(ll a,ll b,ll mod){//快速乘法 
    ll ans=0;
    while(b){
        if(b&1){
            ans=(ans+a)%mod;
        } 
        a=(a+a)%mod;
        b>>=1;
    }
    return ans%mod;
}

 

快速幂+快速乘法:

ll mul(ll a,ll b,ll mod){//快速乘法 
    ll ans=0;
    while(b){
        if(b&1){
            ans=(ans+a)%mod;
        } 
        a=(a+a)%mod;
        b>>=1;
    }
    return ans%mod;
}
ll qpow(ll a,ll b,ll mod){
    ll ans=1;
    while(b){
        if(b&1){
            ans=mul(ans,a,mod)%mod;
        }
        a=mul(a,a,mod)%mod;
        b>>=1;
    }
    return ans%mod;
} 

 

posted @ 2020-11-11 23:17  哎呦哎(iui)  阅读(196)  评论(0编辑  收藏  举报