快速幂和快速乘

快速幂运算

求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))


posted @ 2022-05-23 01:05  王毅2016  阅读(15)  评论(0编辑  收藏  举报