我正在尝试找到一种非常快速的方法来查找下一个大于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/

10-12 05:20