快速幂
介绍
快速幂,二进制取幂(Binary Exponentiation,也称平方法),是一个在 O(logn) 的时间内计算 an 的小技巧,而暴力的计算需要 O(n) 的时间。
计算 a 的 n 次方表示将 n 个 a 乘在一起:
an=n 个 aa×a⋯×a。然而当 a,n 太大的时侯,这种方法就不太适用了。不过我们知道:ab+c=ab⋅ac,a2b=ab⋅ab=(ab)2。二进制取幂的想法是,我们将取幂的任务按照指数的二进制表示来分割成更小的任务。
算法示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| long long int quik_power(int base, int power) { long long int result = 1; while (power > 0) { if (power & 1) result *= base; base *= base; power >>= 1; } return result; }
|
算法分析
- 时间复杂度 O(logn)
- 空间复杂度 O(1)