Определите, что выведет программа.
Рассмотрим основную функцию в программе: если выполнено условие увеличивается вдвое. Как только условие цикла перестает выполняться, то есть
мы выходим из цикла и выводим
То есть ответом будет минимальное (т.к. иначе из цикла мы бы вышли на предыдущем или одном из предыдущих значениях) значение
при котором
то есть
Немного попытавшись поподбирать целые корни — 24 = 0, несложно догадаться, что так задачу не решить. Тогда можно воспользоваться тем, что мы рассматриваем только целые
и подобрать такое
что
— такое
и будет решением, т.к. оно будет первым, при котором мы выйдем из цикла.
Но это не самый легкий и умный путь. Если
а
— и сравнить эти значения не очень трудно.
значит, при
= 129 условие цикла еще верно. Теперь посмотрим на
= 130:
а
— очевидно,
< 130.
Теперь посмотрим, что если условие цикла выполняется, то умножается на 2. То есть ответом будет какая-то степень двойки, так как мы начали с
= 1 и в цикле все время умножали
на 2.
Итак, в любой момент выполнения цикла — это какая-то степень двойки. Найдем последнюю степень двойки, меньшую 130. Это
= 128. На всякий случай покажем, что f(128)
g(128):
то есть
Значит, т.к.
= 128 — степень двойки, в цикле мы достигнем такого значения и в теле цикла умножим
на 2, получив 256. 256 > 130 и условие цикла уже не будет выполнено:
мы выйдем из цикла — это и будет наш ответ.