快速幂算法
快速幂算法能帮我们算出指数非常大的幂,传统的求幂算法之所以时间复杂度非常高,就是因为当指数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^1)
9^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