详解快速幂

快速幂:

快速幂(Exponentiation by squaring)是一种可以高效计算幂运算的方法。在计算a的n次方时,传统的方法是使用循环连续乘a n次。而快速幂的思想是通过将指数进行二进制拆分,以及利用幂运算的特性,大大减少了计算的次数,从而提高了计算效率。

具体步骤如下:

  1. 将指数n转化为二进制,以便拆分。
  2. 初始化一个累积值result为1。
  3. 从最低位开始,遍历二进制数的每一位。
    • 如果当前位为1,将累积值result乘以底数a。
    • 将底数a自乘,即a自乘一次。
  4. 将底数a自乘,即a自乘一次。
  5. 取下一位二进制数。
  6. 重复步骤3-5,直到遍历完整个二进制数。
  7. 最后,累积值result即为底数a的n次方。

通过这种方法,可以将指数n的二进制表示形式中的每一位都利用起来,而不是逐位相乘。这样可以大大减少计算的次数。对于一个n位的二进制数,只需要进行O(log(n))次计算即可得到结果,相比传统的方法,复杂度大大降低。

快速幂模板:

long long fastPow(long long a, long long b, long long mod) {
    long long res = 1;
    while (b > 0) {
        if (b & 1) {
            res = (res * a) % mod;
        }
        a = (a * a) % mod;
        b >>= 1;
    }
    return res;
}

这个函数接受三个参数:底数 a、指数 b 和取模数 mod。它计算并返回 a 的 b 次方对 mod 取余的结果。

该算法通过将指数 b 转换为二进制形式,每次迭代都计算当前位上的幂值,如果该位为 1,则将结果乘以当前位的幂值,最后返回结果。迭代的过程中,每次将底数 a 自乘并对 mod 取余,以避免计算过程中溢出。

例如,若调用 fastPow(2, 10, 1000000007),则返回结果为 1024

这是本蒟蒻的第三篇题解,望多多支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值