Исполнитель Чипсы с крабом преобразует число, записанное на экране. У исполнителя есть команды, которым присвоены номера:
- Прибавить
- Умножить на
Первая команда увеличивает число на экране на вторая — увеличивает число в
раза. Программа для исполнителя Крабоед — это последовательность команд. Сколько существует программ, для которых при исходном числе
результатом является число
и при этом траектория вычислений не содержит
и содержит
?
Решение 1 (Рекурсия)
def f(s, fi, flag):
if s > fi:
return 0
if s == 99:
return 0
if s == 50:
flag = True
if s == fi and flag:
return 1
return f(s + 2, fi, flag) + f(s * 3, fi, flag)
print(f(10, 100, False))
Решение 2 (Динамика)
a = [0] * 101
a[10] = 1
for i in range(11, 101):
a[i] = a[i - 2] + a[i // 3] * (i % 3 == 0)
if i == 99:
a[i] = 0
if i == 50:
for j in range(i):
a[j] = 0
print(a[100])