Исполнитель Увеличитель преобразует число на экране.
У исполнителя есть две команды, которым присвоены номера.
1. Вычти 1.
2. Найди целую часть от деления на 2.
Первая из них уменьшает число на экране
Программа для исполнителя — это последовательность команд.
При исходном
Траектория вычислений программы — это последовательность результатов выполнения всех команд программы. Например, для программы 122 при исходном
Пусть R(n) — количество программ, которые
Траекторию вычисления получения
R(45) = R(44) = R(43) = ... =R(23) = 1.
Числа
R(22) = R(23) + R(45) + R(44) = 3;
R(21) = R(22) + R(43) + R(42) = 5;
R(20) = R(21) + R(41) + R(40) = 7;
R(19) = R(20) + R(39) + R(38) = 9;
R(18) = R(19) + R(37) + R(36) = 11;
R(17) = R(18) + R(35) + R(34) = 13;
R(16) = R(17) + R(33) + R(32) = 15;
R(15) = R(16) + R(31) + R(30) = 17.
Числа
R(15) = R(14) = R(13) = ... =R(8) = 17;
R(7) = R(8) + R(15) + R(14) = 51;
R(6) = R(7) + R(13) + R(12) = 85;
R(4) = R(7) + R(8) = 34;
R(3) = R(4) + R(7) + R(6) = 170.
Таким образом, количество программ, удовлетворяющих условию задачи,
Ответ: 170.
Приведём другое решение на языке Python.
def f(x, y):
if x < y or x == 5:
return 0
if x == y:
return 1
else:
return f(x - 1, y) + f(x // 2, y)
print(f(45, 15) * f(15, 3))

