以下代码使用迭代平方计算** b:
def power(a,b):
result=1
while b>0:
if b % 2 == 1:
result = result*a
a = a*a
b = b//2
return result
假设十进制数a
和b
的二进制表示中包含n
和m
位。
我正在尝试了解代码对最小和最大数字a
以及b
可能取决于n
和m
的乘法次数。
我知道在代码的第5行和第6行中,进行了乘法运算,但我正在努力用二进制中a
和b
的位数表示乘法次数表示。
任何帮助表示感谢。
答案 0 :(得分:3)
嗯,乘法次数仅取决于此算法的一个因素 - b
(while b > 0
)。
我们遇到的操作会在循环中改变b
的值一次,b = b//2
。
在处理二进制表示时,除以2导致最后一位向右移位 - 由于我们在m
中得到b
位,这意味着循环将被执行{{1} }次。
因为每次我们至少有一个乘法和最多两个(取决于m
中的1
的数量),并且m保证大于0以便发生循环,我们得到总共最少m
和最多m+1
次乘数。