在迭代平方中完成的乘法次数

时间:2017-04-09 16:44:23

标签: python

以下代码使用迭代平方计算** 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

假设十进制数ab的二进制表示中包含nm位。

我正在尝试了解代码对最小和最大数字a以及b可能取决于nm的乘法次数。

我知道在代码的第5行和第6行中,进行了乘法运算,但我正在努力用二进制中ab的位数表示乘法次数表示。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:3)

嗯,乘法次数仅取决于此算法的一个因素 - bwhile b > 0)。

我们遇到的操作会在循环中改变b的值一次,b = b//2

在处理二进制表示时,除以2导致最后一位向右移位 - 由于我们在m中得到b位,这意味着循环将被执行{{1} }次。

因为每次我们至少有一个乘法和最多两个(取决于m中的1的数量),并且m保证大于0以便发生循环,我们得到总共最少m和最多m+1次乘数