Исполнитель Калькулятор преобразует число, записанное на экране.
У исполнителя есть команды, которым присвоены номера:
- Прибавить
- Прибавить
- Умножить на
Первая команда увеличивает число на экране на , вторая — на
, третья — удваивает число на экране. Программа для исполнителя Калькулятор — это последовательность команд.
Сколько существует программ, для которых при исходном числе результатом является число
и при этом троектория содержит числа
и
? Траектория вычислений программы — это последовательность результатов выполнения всех команд программы. Например, для программы
при исходном числе
траектория будет состоять из чисел
,
,
.
Решение 1
a = [0] * 25
a[4] = 1
for i in range(5, 25):
a[i] = a[i - 1] + a[i - 5] + a[i // 2] * (i % 2 == 0)
if i == 11 or i == 17:
for j in range(i):
a[j] = 0
print(a[24])
Решение 2
Пусть — количество программ, которые число 4 преобразуют в число
. Тогда верно следующее утверждение:
— если число не делится на 2.
— если число делится на 2.
Заполним таблицу по данным формулам до 11:
По условию траектория должна проходить через число 11, значит , так как число 12 можно получить только из числа 11 (соблюдая траекторию). Заполним таблицу до 18:
Аналагично , так как число 19 можно получить только из 18, соблюдая траекторию. Заполним таблицу до конца:
Отсюда получаем ответ: 72.