数字快速幂
题目
求13的6次幂:13**6
13**6=13**(【110】二进制)
=13**(2**2) * 13**(2**1)
解释:
a=13,n=6(110)
n(110)最低为0:只进行[a加倍(13^2)、n右移]
n(11)最低为1 :ans乘a(13^2 ),进行[a加倍(13^4)、n右移]
n(1)最低为1 :ans乘a(13^4) ,进行[a加倍(13^8)、n右移]
ps:虽然a此时是13^8,但因为n,it无法用于下层while,故无效了
总代码:
def fastPow(a,n):
ans=1
while(n):
if(n&1):ans*=a #最低位为1,则ans*a;若为0,就不乘
a*=a
n>>=1
#n右移位时,a为a
return ans