快速幂及快速乘法

快速幂:利用二进制解决乘方过高的问题,乘方次数过高可用(例如:nm,m>=1e8)

LL quick(LL n,LL m,LL mod){
    LL ans,res;
    ans = 1;
    res = n%mod;
    while(m){
        if(m&1){
            ans = (ans*res)%mod;
        }
        m>>=1;
        res = (res*res)%mod;
    }
    return ans;
}

 

快速乘法:利用二进制相乘,可防止数据溢出(long long 相乘会溢出的情况可用)

#define LL long long
LL quick_mul(LL a,LL b,LL mod){
    a = a%mod;
    b = b%mod;
    LL ans = 0;
    while(b){
        if(b&1){
            ans += a;
            if(ans >= mod) ans -= mod;
        }
        a<<=1;
        b>>=1;
        if(a>=mod) a -= mod;
    }
    return ans;
}

 

posted @ 2019-07-30 14:59  Obliviate  阅读(236)  评论(0)    收藏  举报