快速幂和快速乘
快速幂运算
求a的b次幂,不能用幂运算
思路:a^b 把b看成二进制,b从最低为开始看 b = (0/1)*2^0+ (0/1)*2^1+ (0/1)*2^2
也就是说b的某一位是1,如果该位位第n低位,则需要乘上a^n
快速乘也是同样道理
求a*b 加上 a^n
def exponential_calculation(a,b):
ans = 1
while b:
if b&1: # 最低位是否为1 二进制
ans *= a
a *= a
b >>= 1 # b 移位
return ans
print(exponential_calculation(3, 3))
def mul_calculation(a,b):
ans = 0
while b:
if b&1: # 最低位是否为1 二进制
ans += a
a += a
b >>= 1 # b 移位
return ans
print(mul_calculation(3, 10))