求2的幂

时间:2019-06-06 10:40:04

标签: python python-3.x binary numbers

查找数字2的幂的最优化方法是什么。例如:如果数字是64,那么我想要6作为结果。

P.S。 :我读了很多关于如何检查数字是否可以表示为2的幂的文章,但是他们没有给出实际的幂。

4 个答案:

答案 0 :(得分:3)

两个logarithm of a number是必须具有该数字的功能:

>>> import math
>>> math.log2(64)
6.0

答案 1 :(得分:1)

您只需要计算以2为底的数字的对数。以下是这样做的两种方法

方法1

import numpy as np

number = 64

power = np.log2(64)
# 6.0

方法2

import math

math.log2(number)
# 6.0

答案 2 :(得分:1)

这是一个选择(您正在寻找以2为底的log韵律):

from math import log2


def integer_log2(n):
    if not bin(n).count("1") == 1:
        raise ValueError
    return int(log2(n))

以二进制表示(bin(n)),数字只能是2的整数次幂,它只包含一个1。如果不是这种情况,此处介绍的函数将引发ValueError

integer_log2(64))
# 6

由于您仍然需要二进制表示形式,因此您也可以只计算0的数量来获取日志:

def integer_log2(n):
    b = bin(n)
    if not b.count("1") == 1:
        raise ValueError
    return b.count("0") - 1

答案 3 :(得分:1)

这是一种骇客。将其转换为二进制数。如果输入将是2的倍数,那么这将不是问题

>> bin(2).count('0') -1
1
>>> bin(64).count('0') -1
6
>>> bin(1024).count('0') -1
10
>>> bin(1024)
'0b10000000000'