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