我正在尝试找到一种非常快速的方法来查找下一个大于2的高幂数,而不是一个很大的数字(1,000,000)。例如,我有1009,并想找到它的下一个更高的2的幂,即1024或2 ** 10
我尝试使用循环,但是对于大量循环来说,这非常非常慢
y=0
while (1<<y)<1009:
y+=1
print(1<<y)
1024
尽管此方法有效,但对于大于一百万个数字的数字来说速度很慢。是否有更快的算法可以找到比大数高2的下一个更高的幂?
回复@JonClements
使用2 ** number.bit_length()可以完美地工作。因此,这也适用于大量用户。谢谢乔恩。
这是来自Jon的实现的代码示例:
2**j.bit_length()
1024
这是使用移位运算符的代码示例
2<<(j.bit_length()-1)
1024
这是使用百万长度数字的时差,移位运算符和bit_length显着更快:
len(str(aa))
1000000
def useBITLENGTHwithshiftoperator(hm):
return 1<<hm.bit_length()-1<<1
def useBITLENGTHwithpowersoperator(hm):
return 2**hm.bit_length()
start = time.time()
l=useBITLENGTHwithpowersoperator(aa)
end = time.time()
print(end - start)
0.014303922653198242
start = time.time()
l=useBITLENGTHwithshiftoperator(aa)
end = time.time()
print(end - start)
0.0002968311309814453
最佳答案
取2 ^ ceiling(logBase2(x))-应该起作用,除非x为2的幂。您可以使用if x==ceiling(x)
进行检查。
关于python - 查找大于2的幂的最快方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58296976/