да
Если бы ограничения были слишком большие (число в десятки тысяч бит)
def f(n):
le = n.bit_length() - 1
big_one = 1 << le
res = n
for _ in range(le):
n = (n >> 1) | big_one if n & 1 else n >> 1
if res < n:
res = n
return res
from random import randrange
f(randrange(1 << 10_000))
Сделай, чо.