Я пытаюсь найти очень быстрый способ найти следующие более высокие степени 2, чем очень большое число (1 000 000) цифр. Например, у меня есть 1009, и я хочу найти следующие более высокие степени двух, которые равны 1024 или 2 ** 10
Я пытался использовать цикл, но для больших чисел это очень, очень медленно
y=0
while (1<<y)<1009:
y+=1
print(1<<y)
1024
Хотя это работает, это медленно для чисел, превышающих миллион цифр. Есть ли более быстрый алгоритм для нахождения следующих более высоких степеней 2, чем большое число?
ОТВЕТЫ НА @JonClements
с использованием 2 ** number.bit_length () работает отлично. Так что это будет работать для больших количеств. Спасибо Джону.
Вот пример кода из реализации Джона:
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