快速幂是一种简单而有效的小算法,它可以以 O ( l o g n ) O(logn) O(logn)的时间复杂度计算幂。
以 6 5 6^{5} 65为例,我们将幂转换为二进制 ( 101 ) 2 (101)_2 (101)2, 6 5 = 6 ( 101 ) 2 6^{5}=6^{(101)_2} 65=6(101)2。
所以我们只需看101中的每一个1都代表是多少即可。
知道了每一位代表多少数值,然后我们将上述结果相乘即可。
现在就有2个问题摆在面前,
为了解决上述问题,对于幂101,可以使用这样一套操作:
至此全部问题都解决了,代码如下:
def fastPower(base, n):
# &按位与运算,举例101&011= 001,就是在二进制下,都是1才是1
ans = 1
while n:
if n & 1:
ans *= base
base *= base # 平方
n >>= 1
return ans