快速幂算法

快速幂算法能帮我们算出指数非常大的幂,传统的求幂算法之所以时间复杂度非常高,就是因为当指数n非常大的时候,需要执行的循环操作次数也非常大。
快速幂算法的核心思想就是每一步都把指数分成两半,而相应的底数做平方运算。

3^10=3*3*3*3*3*3*3*3*3*3
3^10=(3*3)*(3*3)*(3*3)*(3*3)*(3*3)
3^10=(3*3)^5
3^10=9^5

此时指数由10缩减一半变成了5,而底数变成了原来的平方,求3^10 原本需要执行10次循环操作,求9^5却只需要执行5次循环操作。

9^5=9^4*9^19^5=6561^1*(9^1)

模板代码

  • base 底数
  • power 指数
  • mod 求模
long long fastPower(long long base, long long power, long long mod) {
    long long result = 1;
    while (power > 0) {
        if (power & 1) {//此处等价于if(power%2==1)
            result = result * base % mod;
        }
        power >>= 1;//此处等价于power=power/2
        base = (base * base) % mod;
    }
    return result;
}

参考

https://blog.csdn.net/qq_19782019/article/details/85621386

03-27 17:51