快熟幂运算

快熟幂运算

原理

有2^99 = 2^50 * 2^49 = 2^25 * 2^25 * 2^25 * 2^24 = 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2......

又 2^99 [十进制 ] = 2 ^ (1100011) [转换为2进制]

所以所以 2^99 [十进制 ] = 2^(1000000) * 2^(100000) * 2^(11) [转换为2进制]

由于需要使用快速幂运算的大多数都是数值范围大于longlong的 ,故需要对某个数取模

代码

int quickPow(ll a, ll b, ll c)
{
    // 快速幂运算
    // a的b次方 对c取余
    ll ans = 1;
    while (b)
    {
        if (b & 1)
            ans = (ans * a) % c;
        a = (a * a) % c;
        b >>= 1;// 每次除于2
    }
    return ans;
}
posted @ 2020-08-22 18:23  9+JQK  阅读(164)  评论(0)    收藏  举报