У исполнителя Калькулятор две команды, которым присвоены номера.
1. Прибавь 2.
2. Умножь на 5.
Первая из них увеличивает число на экране
Программа для Калькулятора — это последовательность команд.
Сколько есть программ, которые
Обозначим R(n) — количество программ, которые преобразуют
Верны следующие соотношения.
1. Если n не делится
2. Пусть n делится на 5.
Тогда
При n = 10 R(n) = 2 (два способа: прибавлением четырёх двоек или однократным умножением
Поэтому достаточно постепенно вычислить значения R(n) для всех чисел, кратных десяти и
Имеем:
R(2) = 1 = R(4) = R(6) = R(8);
R(10) = 2 = R(2) + R(8);
R(20) = R(4) + R(10) = 1 + 2 = 3 = R(22) = R(28);
R(30) = R(6) + R(20) = 1 + 3 = 4 = R(32) = R(38);
R(40) = R(8) + R(30) = 1 + 4 = 5 = R(42) = R(48);
R(50) = R(10) + R(40) = 2 + 5 = 7.
Ответ: 7.
Другая форма решения.
Будем решать поставленную задачу последовательно для чисел 2, 4, 6, 50 (то есть для каждого из чисел определим, сколько программ исполнителя существует для его получения). Заметим, что нечётные числа мы никак получить не можем. Количество программ, которые преобразуют
Если число на пять делится, то вариантов последней команды два: Заполним соответствующую таблицу по приведённым формулам слева направо:
| 2 | 4 | 6 | 8 | 10 | 12 | 14 | 16 | 18 | 20 | 22 | 24 | 26 | 28 | 30 |
| 1 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 3 | 3 | 3 | 3 | 3 | 4 |
| 34 | 36 | 38 | 40 | 42 | 44 | 48 | 50 | |||||||
| 4 | 4 | 4 | 5 | 5 | 5 | 5 | 7 |
При этом ячейки, относящиеся к числам, которые не делятся
| 2 | 10 | 20 | 30 | 40 | 50 |
| 1 | 2 | 3 | 4 | 5 | 7 |
Ответ: 7.
Приведём решение Б. С. Михлина на языке Python.
def f(x, y):
if x == y:
return 1
if x > y:
return 0
return f(x + 2, y)+f(x * 5, y)
print(f(2, 50))

