高效求解一个2的N次方幂的算法

高效求解一个2的N次方幂的算法

解法:时间复杂度在O(log N),其中log N的下标可以是k=2,3,4......(例如logN),但是它们统称为O(log N)。

思路?

我们可以将2的N次方幂的指数N从1每次以两倍(三倍、四倍.....,但是它们的执行次数都是logkN)的速度往上递增到N,这样我们的时间复杂度会远远降低,就能高效的求解2的N次方幂。

例如我们以二为例:

解法?

方法(递归形式):

def erdeNcifangmi(a):
    b=1
    sum=2
    if a==1: //若a==1时,则返回2
        return sum
if a==0: //若a==0,则返回1
return 1
while (b<<1)<=a: //表示b<<1(即b*2)小于a sum*=sum //看上述图解可知 b=b<<1 if (b<<1)>a: //若我们输入的a不是二的整数倍,而我们写的算法不能让b变为log2a。则需要将我们剩余的指数表示出来(a-b),之后再进入递归进行计算之后的得出结果。 sum1=sum return sum1*erdeNcifangmi(a-b) c=int(input()) num=erdeNcifangmi(c) print(num)

 

posted @ 2022-02-28 00:19  天空之城—我的理想国  阅读(897)  评论(0编辑  收藏  举报