Степень двойки
Вы решили задачу. Теперь можно сравнить подходы.
Удваиваем степень, пока следующее удвоение ещё допустимо.
Авторский разбор для локальной версии на основе условия задачи. Это не выгрузка чужих посылок и не официальное решение исходного сайта.
Ваше принятое решение
Рекомендуемое решение: Последовательное удвоение
Инвариант: power — степень двойки с показателем exponent.
n = int(input())
power, exponent = 1, 0
while power * 2 <= n:
power *= 2
exponent += 1
print(exponent, power)
Время: O(log N). Память: O(1) целых чисел.
Другой способ: Длина двоичной записи
Старший единичный бит задаёт нужную степень. Сдвиг не использует операцию возведения в степень.
n = int(input())
k = n.bit_length() - 1
print(k, 1 << k)
Время: O(log N) с учётом создания результата в битовой модели. Память: O(log N) бит.
На что обратить внимание
- При N=1 показатель равен нулю, степень равна единице.
Рекомендация учитывает сложность и читаемость для этой задачи. Единственного самого быстрого решения для всех размеров входа и всех компьютеров может не быть.