Исполнитель Крабомёт преобразует число на экране.
У исполнителя есть две команды, которым присвоены номера:
- Прибавить
- Умножить на
Первая команда увеличивает число на экране на , вторая увеличивает его в
раза. Программа для исполнителя Программист — это последовательность команд.
Сколько существует программ, для которых при исходном числе результатом является число
и при этом траектория вычислений не содержит число
? Траектория вычислений программы — это последовательность результатов выполнения всех команд программы. Например, для программы
при исходном числе
траектория будет состоять из чисел
,
,
.
Решение 1
a = [0] * 20
a[1] = 1
for i in range(2, 20):
a[i] = a[i - 1] + a[i // 2] * (i % 2 == 0)
if i == 14:
a[i] = 0
print(a[19])
Решение 2
a = [0] * 40
a[1] = 1
for i in range(1, 19):
if i == 14:
a[i] = 0
a[i + 1] += a[i]
a[i * 2] += a[i]
print(a[19])
Решение 3 Пусть — количество программ, которые число 1 преобразуют в число
. Тогда верно следующее утверждение:
Заполним таблицу по данной формуле до 13:
Так как по условию сказано, что траектория не должна проходить через число 14, значит мы никак не можем его получить, что означает .
Заполним таблицу до конца:
Отсюда получаем ответ — 20.