Исполнитель Тренер преобразует число на экране.
У исполнителя есть две команды, которым присвоены номера.
1. Прибавить 1.
2. Умножить на 2.
Первая команда увеличивает число на экране
Сколько существует программ, которые преобразуют исходное
Траектория должна содержать оба указанных числа. Траектория вычислений — это последовательность результатов выполнения всех команд программы. Например, для программы 212 при исходном
Нужно найти количество программ, которые
Обозначим R(n) — количество программ, которые преобразуют
Верны следующие соотношения:
1. Если n не делится
2. Пусть n делится
Если
Если n = 1, то R(n) = 1 (два способа: прибавление единицы и удвоение).
Теперь можно постепенно вычислить все значения:
R(2) = R(1) + R(1) = 1 + 1 = 2 = R(3);
R(4) = R(2) + R(3) = 2 + 2 = 4 = R(5);
R(6) = R(3) + R(5) = 2 + 4 = 6 = R(7);
R(8) = R(4) + R(7) = 4 + 6 = 10 = R(9);
R(10) = R(5) + R(9) = 4 + 10 = 14.
Программ, получающих
А программа, получающая
Таким образом, находим ответ:
Ответ: 28.
Приведём другое решение на языке Python.
def f(x, y):
if x > y:
return 0
if x == y:
return 1
else:
return f(x + 1, y) + f(x * 2, y)
print(f(1, 10) * f(10, 21) * f(21, 30))

