26.04.2025

16. 8585

(Л. Шастин) Исполнитель преобразует число на экране. У исполнителя есть три команды, которым присвоены номера:

1. Вычти сумму всех цифр числа
2. Найди целую часть от деления на 2
3. Вычти 1

Первая из них уменьшает число на экране на сумму всех его цифр, вторая заменяет число на экране на целую часть от деления числа на 2, а третья уменьшает число на единицу.

Программа для исполнителя – это последовательность команд.

Сколько существует программ, для которых при исходном числе 40 результатом является число 10, и при этом траектория вычислений содержит число 25?

Траектория вычислений программы – это последовательность результатов выполнения всех команд программы. Например, для программы 1223 при исходном числе 10 траектория состоит из чисел 9, 4, 2, 1.
def F(a,b):
    if a < b: return 0
    if a == b: return 1
    if a > b:
        n = list(str(a))
        su = 0
        for elem in n:
            su+=int(elem)
        return F(a-su,b)+F(a//2,b)+F(a-1,b)
print(F(40,25)*F(25,10))