Исполнитель ЭМИ преобразует число, записанное на экране. У исполнителя есть команды, которым присвоены номера:
- Прибавить
;
- Прибавить
;
- Умножить на
;
- Умножить на
.
Первая команда увеличивает число, записанное на экране, на , вторая — на
, третья — удваивает число на экране, четвертая — утраивает число на экране. Программа для исполнителя ЭМИ — это последовательность команд. Сколько существует программ, для которых при исходном числе
результатом является число
и при этом траектория вычисления не содержит числа
и
?
Траектория вычислений программы – это последовательность результатов выполнения всех команд программы. Например, для программы при исходном числе
траектория будет состоять из чисел
.
Рекурсия:
def f(x, y):
if x > y or x == 5 or x == 17 or x == 35:
return 0
elif x == y:
return 1
else:
return f(x + 1, y) + f(x + 3, y) + f(x * 2, y) + f(x * 3, y)
print(f(3, 45))
Динамика:
a = [0]*46
a[3] = 1
for i in range(4, 46):
a[i] = a[i-1]+a[i-3]
if i % 2 == 0:
a[i] += a[i//2]
if i % 3 == 0:
a[i] += a[i//3]
if i == 5 or i == 17 or i == 35:
a[i] = 0
print(a[45])