Определите, что выведет программа.
Рассмотрим основную функцию в программе: если выполнено условие
увеличивается вдвое. Как только условие цикла перестает выполняться, то есть
при котором
> 4000
+ 7.
Грустная часть решения состоит в том, что при попытке решить уравнение — 4000
— 7 = 0 мы с досадой замечаем, что корни получаются нецелыми, и, скорее всего, тратим много времени на то, чтобы еще раз перепроверить вычисления. Поэтому самые настойчивые пытаются оценить полученные корни (полезно напомнить, что пользоваться калькулятором на экзамене нельзя, но оценить на самом деле не так сложно: 2000
2000 = 4000000 <
< 2001
2001 = 4004001, то есть
= 4001 — а олимпиадники в душе — найти более изящное решение. И правда, заметим, что при
= 4000 условие цикла еще выполняется: 4000
4000
4000
4000 + 7 — а вот уже при
= 4001 получаем, что 4001
4001 > 4000
4001 + 7, т.к. 4001
4001 = (4000 + 1)
4001 = 4000
4001 + 4001, то есть предыдущее неравенство — это 4000
4001 + 4001 > 4000
4001 + 7, что, очевидно, правда. Так или иначе, теперь мы знаем, что при
< 4001 условие цикла еще выполняется, а при
4001 — уже нет.
Теперь посмотрим, что если условие цикла выполняется, то умножается на 2. То есть ответом будет какая-то степень двойки, так как мы начали с
= 1 и в цикле все время умножали
на 2.
Итак, в любой момент выполнения цикла — это какая-то степень двойки. Найдем последнюю степень двойки, меньшую 4001. Это
= 2048. На всякий случай покажем, что f(2048)
g(2048): 2048
2048
4000
2048 + 7, то есть 2048
2048
(2048 + 1952)
2048 + 7 = 2048
2048 + 1952
2048 + 7. Значит, т.к.
= 2048 — степень двойки, в цикле мы достигнем такого значения и в теле цикла умножим
на 2, получив 4096. 4096 > 4001 и условие цикла уже не будет выполнено: (4000 + 96)
4096 = 4000
4096 + 96
4096 > 4000
4096 + 7. Значит, при таком
мы выйдем из цикла — это и будет наш ответ.