查找数字2的幂的最优化方法是什么。例如:如果数字是64,那么我想要6作为结果。
P.S。 :我读了很多关于如何检查数字是否可以表示为2的幂的文章,但是他们没有给出实际的幂。
答案 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'