抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

快速幂

原理

复杂度:

只要把指数位拆分,就可以实现复杂度的骤减。

实现思路

  1. 拆分二进制,取出每一位上的值。(移位)
  2. 如果值为 1 ,则乘。

实现代码

int fast_pow(int a, int b) {
    int ans = 1, base = a;
    while (b > 0) {
        if (b & 1) ans *= base;
        base *= base;
        b >>= 1;
    }
    return ans;
}

大数取模

原理

实现思路

  1. 大数幂取模:乘数取模后相乘再取模。

  2. 大数取模:累加时取模。

代码

int fast_pow_mod(int a, int b, int p) {
    int a1 = a, t = 1;
    while (b > 0) {
        if (b & 1)
            t = (t % p) * (a1 % p) % p;
        a1 = (a1 % p) * (a1 % p) % p;
        b>>=1;
    }
    return t % p;
}
int fast_mod(string s, int m) {
    int sum = 0;
    for (auto c:s) {
        sum = (sum * 10 + c - '0') % m;
    }
    return sum;
}



博客内容遵循 [署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh)
本站总访问量为 访客数为
本站使用 Volantis 作为主题