Исполнитель POLKOVNIK KONDRATENKO преобразует число на экране. У исполнителя есть две команды, которым присвоены номера:
1. Разделить на с округлением вниз (выполнить целочисленное деление на
)
2. Вычесть
Первая команда уменьшает число на экране в раза, вторая — уменьшает его на
. Программа для исполнителя — это последовательность команд.
Определите количество программ, которые число преобразуют в число
.
Решение 1 (Рекурсия)
def f(a, b):
if a == b:
return 1
if a < b:
return 0
return f(a // 2, b) + f(a - 1, b)
print(f(64, 14))
Решение 2 (Динамика)
a = [0] * 65
a[64] = 1
for i in range(64, 14, -1):
a[i // 2] += a[i]
a[i - 1] += a[i]
print(a[14])