№23 — примеры решений
Один эталонный разбор.
Условие
Исполнитель преобразует число, записанное на экране. У исполнителя есть три команды, которые обозначены латинскими буквами:
A. вычти 3
B. вычти 6
C. найди целую часть от деления на 2
Программа для исполнителя - это последовательность команд.
Сколько существует программ, для которых при исходном числе 86 результатом является 12, при этом траектория вычислений содержит число 53 и не содержит 36?
Траектория вычислений программы - это последовательность результатов выполнения всех команд программы.
Например, для программы CBA при исходном числе 27 траектория состоит из чисел 13, 7, 4.
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m: return 1
if n < m: return 0
if n == 36: return 0
return f(n-3, m) + f(n-6, m) + f(n//2, m)
print(f(86, 53) * f(53, 12))
Ответ:144
📚
Все задачи с разбором
79
Условие
Исполнитель преобразует число на экране.
У исполнителя есть две команды, которые обозначены латинскими буквами:
A. Вычти 1
B. Найди целую часть от деления на 2
Первая из них уменьшает число на экране на 1, вторая заменяет число на экране на целую часть от деления числа на 2.
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 40 результатом является 6, и при этом траектория вычислений содержит число 17?
Траектория вычислений программы — это последовательность результатов выполнения всех команд программы.
Например, для программы АВВ при исходном числе 10 траектория состоит из чисел 9, 4, 2.
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m: return 1
if n < m: return 0
return f(n-1, m) + f(n//2, m)
print(f(40, 17) * f(17, 6))
Ответ:56
Условие
Исполнитель преобразует число на экране.
У исполнителя есть две команды, которые обозначены латинскими буквами:
A. Вычти 1
B. Найди целую часть от деления на 2
Первая из них уменьшает число на экране на 1, вторая заменяет число на экране на целую часть от деления числа на 2.
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 20 результатом является 0, и при этом траектория вычислений содержит число 6 и не содержит число 5?
Траектория вычислений программы — это последовательность результатов выполнения всех команд программы.
Например, для программы ВАА при исходном числе 10 траектория состоит из чисел 5, 4, 3.
Сколько существует программ, для которых при исходном числе 40 результатом является 6, и при этом траектория вычислений содержит число 16? Траектория вычислений программы — это последовательность результатов выполнения всех команд программы. Например, для программы АВВ при исходном числе 10 траектория состоит из чисел 9, 4, 2.
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m: return 1
if n < m: return 0
if n == 5: return 0
return f(n-1, m) + f(n//2, m)
print(f(20, 6) * f(6, 0))
Ответ:60
Условие
Исполнитель преобразует число на экране.
У исполнителя есть три команды, которые обозначены латинскими буквами:
A. Вычесть 1
B. Вычесть 4
C. Найти целую часть от деления на 3
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 13 результатом является 0, и при этом траектория вычислений содержит число 11 и не содержит число 4?
Траектория вычислений программы — это последовательность результатов выполнения всех команд программы.
Например, для программы СВА при исходном числе 18 траектория состоит из чисел 6, 2, 1.
Сколько существует программ, для которых при исходном числе 19 результатом является 2, при этом траектория вычислений не содержит числа 7 и содержит 13? Траектория вычислений программы — это последовательность результатов выполнения всех команд программы. Например, для программы CBA при исходном числе 22 траектория состоит из чисел 7, 3, 2.
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m: return 1
if n < m: return 0
if n == 4: return 0
return f(n-1, m) + f(n-4, m) + f(n//3, m)
print(f(13, 11) * f(11, 0))
Ответ:68
Условие
Исполнитель преобразует число на экране.
У исполнителя есть три команды, которые обозначены латинскими буквами:
A. Вычесть 1
B. Вычесть 6
C. Найти целую часть от деления на 2
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 30 результатом является 6, и при этом траектория вычислений содержит число 13 и не содержит число 16?
Траектория вычислений программы — это последовательность результатов выполнения всех команд программы.
Например, для программы СВА при исходном числе 18 траектория состоит из чисел 6, 2, 1.
Сколько существует таких программ, которые исходное число 34 преобразуют в число 6 и при этом траектория вычислений программы содержит числа 19 и 20 и не содержит числа 24? Траектория вычислений программы — это последовательность результатов выполнения всех команд программы. Например, для программы ABC при исходном числе 14 траектория состоит из чисел 13, 7, 3.
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m: return 1
if n < m: return 0
if n == 16: return 0
return f(n-1, m) + f(n-6, m) + f(n//2, m)
print(f(30, 13) * f(13, 6))
Ответ:115
Условие
Исполнитель преобразует число на экране.
У исполнителя есть две команды, которые обозначены латинскими буквами:
A. Вычти 2
B. Найди целую часть от деления на 2
Первая из них уменьшает число на экране на 2, вторая заменяет число на экране на целую часть от деления числа на 2.
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 20 результатом является 0, и при этом траектория вычислений содержит число 16?
Траектория вычислений программы — это последовательность результатов выполнения всех команд программы.
Например, для программы ВАА при исходном числе 10 траектория состоит из чисел 5, 3, 1.
Сколько существует программ, для которых при исходном числе 38 результатом является число 2 и при этом траектория вычислений содержит число 16? Траектория вычислений программы – это последовательность результатов выполнения всех команд программы. Например, для программы ABB при исходном числе 13 траектория состоит из чисел 11, 5, 2.
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m: return 1
if n < m: return 0
return f(n-2, m) + f(n//2, m)
print(f(20, 16) * f(16, 0))
Ответ:36
Условие
Исполнитель преобразует число на экране.
У исполнителя есть две команды, которые обозначены латинскими буквами:
A. Вычти 1
B. Найди целую часть от деления на 2
Первая из них уменьшает число на экране на 1, вторая заменяет число на экране на целую часть от деления числа на 2.
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 22 результатом является 0, и при этом траектория вычислений содержит число 1 и не содержит число 11?
Траектория вычислений программы — это последовательность результатов выполнения всех команд программы.
Например, для программы ВАА при исходном числе 10 траектория состоит из чисел 5, 4, 3.
Сколько существует программ, для которых при исходном числе 30 результатом является число 1, и при этом траектория вычислений содержит число 12? Траектория вычислений программы — это последовательность результатов выполнения всех команд программы. Например, для программы 122 при исходном числе 10 траектория состоит из чисел 9, 4, 2.
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m: return 1
if n < m: return 0
if n == 11: return 0
return f(n-1, m) + f(n//2, m)
print(f(22, 1) * f(1, 0))
Ответ:376
Условие
Исполнитель преобразует число на экране.
У исполнителя есть две команды, которые обозначены латинскими буквами:
A. Вычти 2
B. Найди целую часть от деления на 2
Первая из них уменьшает число на экране на 2, вторая заменяет число на экране на целую часть от деления числа на 2.
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 20 результатом является 0, и при этом траектория вычислений содержит число 16?
Траектория вычислений программы — это последовательность результатов выполнения всех команд программы.
Например, для программы ВАА при исходном числе 10 траектория состоит из чисел 5, 3, 1.
Сколько существует программ, для которых при исходном числе 38 результатом является число 2 и при этом траектория вычислений содержит число 16? Траектория вычислений программы – это последовательность результатов выполнения всех команд программы. Например, для программы ABB при исходном числе 13 траектория состоит из чисел 11, 5, 2.
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m: return 1
if n < m: return 0
return f(n-2, m) + f(n//2, m)
print(f(20, 16) * f(16, 0))
Ответ:36
Условие
Исполнитель преобразует число на экране.
У исполнителя есть три команды, которые обозначены латинскими буквами:
A. Прибавить 3
B. Прибавить 7
C. Умножить на 3
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 1 результатом является 51, и при этом траектория вычислений содержит число 3 и не содержит число 13?
Траектория вычислений программы — это последовательность результатов выполнения всех команд программы.
Например, для программы СВА при исходном числе 1 траектория состоит из чисел 3, 10, 13.
Сколько существует таких программ, которые исходное число 12 преобразуют в 89, и при этом траектория вычислений программы содержит числа 40 и 72 и не содержит 56?
Траектория вычислений программы - это последовательность результатов выполнения всех команд.
Например, для программы CBA при исходном числе 7 траектория состоит из чисел 21, 28, 31.
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m: return 1
if n > m: return 0
if n == 13: return 0
return f(n+3, m) + f(n+7, m) + f(n*3, m)
print(f(1, 3) * f(3, 51))
Ответ:324
Условие
Исполнитель преобразует число на экране.
У исполнителя есть три команды, которые обозначены латинскими буквами:
A. Прибавить 1
B. Прибавить 2
C. Умножить на 2
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 1 результатом является 15, и при этом траектория вычислений содержит число 13 и не содержит число 4?
Траектория вычислений программы — это последовательность результатов выполнения всех команд программы.
Например, для программы СВА при исходном числе 1 траектория состоит из чисел 2, 4, 5.
Сколько существует программ, для которых при исходном числе 3 результатом является число 18, при этом траектория вычислений содержит число 14 и не содержит 8?
Траектория вычислений программы – это последовательность результатов выполнения всех команд программы.
Например, для программы CBA при исходном числе 7 траектория будет состоять из чисел 14, 16, 17.
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m: return 1
if n > m: return 0
if n == 4: return 0
return f(n+1, m) + f(n+2, m) + f(n*2, m)
print(f(1, 13) * f(13, 15))
Ответ:360
Условие
Исполнитель преобразует число на экране.
У исполнителя есть три команды, которые обозначены латинскими буквами:
A. Вычесть 1
B. Вычесть 2
C. Найти целую часть от деления на 3
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 18 результатом является 3, и при этом траектория вычислений содержит число 4 и не содержит число 7?
Траектория вычислений программы — это последовательность результатов выполнения всех команд программы.
Например, для программы СВА при исходном числе 18 траектория состоит из чисел 6, 4, 3.
Сколько существует программ, для которых при исходном числе 19 результатом является число 4, при этом траектория вычислений содержит число 6 и не содержит 13? Траектория вычислений программы - это последовательность результатов выполнения всех команд программы.
Например, для программы CBA при исходном числе 13 траектория состоит из чисел 4, 2.
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m: return 1
if n < m: return 0
if n == 7: return 0
return f(n-1, m) + f(n-2, m) + f(n//3, m)
print(f(18, 4) * f(4, 3))
Ответ:212
Условие
Исполнитель преобразует число на экране.
У исполнителя есть три команды, которые обозначены латинскими буквами:
A. Вычесть 1
B. Вычесть 4
C. Найти целую часть от деления на 3
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 14 результатом является 0, и при этом траектория вычислений содержит число 2 и не содержит число 3?
Траектория вычислений программы — это последовательность результатов выполнения всех команд программы.
Например, для программы СВА при исходном числе 18 траектория состоит из чисел 6, 2, 1.
Сколько существует программ, для которых при исходном числе 19 результатом является число 2, при этом траектория вычислений не содержит числа 8 и содержит 14? Траектория вычислений программы - это последовательность результатов выполнения всех команд программы. Например, для программы CBA при исходном числе 22 траектория состоит из чисел 7, 3, 2.
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m: return 1
if n < m: return 0
if n == 3: return 0
return f(n-1, m) + f(n-4, m) + f(n//3, m)
print(f(14, 2) * f(2, 0))
Ответ:69
Условие
Исполнитель преобразует число на экране.
У исполнителя есть три команды, которые обозначены латинскими буквами:
A. Прибавить 1
B. Прибавить 2
C. Умножить на 2
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 1 результатом является 17, и при этом траектория вычислений содержит число 3 и не содержит число 12?
Траектория вычислений программы — это последовательность результатов выполнения всех команд программы.
Например, для программы СВА при исходном числе 1 траектория состоит из чисел 2, 4, 5.
Сколько существует программ, для которых при исходном числе 3 результатом является число 20, при этом траектория вычислений содержит число 7 и не содержит 10?
Траектория вычислений программы - это последовательность результатов выполнения всех команд программы.
Например, для программы CBA при исходном числе 7 траектория состоит из чисел 14, 16, 17.
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m: return 1
if n > m: return 0
if n == 12: return 0
return f(n+1, m) + f(n+2, m) + f(n*2, m)
print(f(1, 3) * f(3, 17))
Ответ:792
Условие
Исполнитель преобразует число на экране.
У исполнителя есть три команды, которые обозначены латинскими буквами:
A. Прибавить 1
B. Умножить на 3
C. Прибавить 5
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 1 результатом является 17, и при этом траектория вычислений содержит число 9 и не содержит число 5?
Траектория вычислений программы — это последовательность результатов выполнения всех команд программы.
Например, для программы СВА при исходном числе 1 траектория состоит из чисел 6, 18, 19.
Сколько существует программ, для которых при исходном числе 2 результатом является число 21, при этом траектория вычислений содержит число 7 и не содержит 16?
Траектория вычислений программы - это последовательность результатов выполнения всех команд программы.
Например, для программы CBA при исходном числе 7 траектория состоит из чисел 12, 36, 37.
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m: return 1
if n > m: return 0
if n == 5: return 0
return f(n+1, m) + f(n*3, m) + f(n+5, m)
print(f(1, 9) * f(9, 17))
Ответ:45
Условие
Исполнитель преобразует число на экране.
У исполнителя есть две команды, которые обозначены латинскими буквами:
A. Вычти 2
B. Найди целую часть от деления на 2
Первая из них уменьшает число на экране на 2, вторая заменяет число на экране на целую часть от деления числа на 2.
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 27 результатом является 0, и при этом траектория вычислений содержит число 2?
Траектория вычислений программы — это последовательность результатов выполнения всех команд программы.
Например, для программы ВАА при исходном числе 10 траектория состоит из чисел 5, 3, 1.
Сколько существует программ, для которых при исходном числе 48 результатом является число 2, и при этом траектория вычислений содержит число 16?
Траектория вычислений программы это последовательность результатов выполнения всех команд программы.
Например, для программы ABB при исходном числе 13 траектория состоит из чисел 11, 5, 2.
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m: return 1
if n < m: return 0
return f(n-2, m) + f(n//2, m)
print(f(27, 2) * f(2, 0))
Ответ:72
Условие
Исполнитель преобразует число на экране.
У исполнителя есть две команды, которые обозначены латинскими буквами:
A. Вычти 2
B. Найди целую часть от деления на 2
Первая из них уменьшает число на экране на 2, вторая заменяет число на экране на целую часть от деления числа на 2.
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 20 результатом является 0, и при этом траектория вычислений содержит число 16?
Траектория вычислений программы — это последовательность результатов выполнения всех команд программы.
Например, для программы ВАА при исходном числе 10 траектория состоит из чисел 5, 3, 1.
Сколько существует программ, для которых при исходном числе 38 результатом является число 2 и при этом траектория вычислений содержит число 16?
Траектория вычислений программы — это последовательность результатов выполнения всех команд программы. Например, для программы ABB при исходном числе 13 траектория состоит из чисел 11, 5, 2.
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m: return 1
if n < m: return 0
return f(n-2, m) + f(n//2, m)
print(f(20, 16) * f(16, 0))
Ответ:36
Условие
Исполнитель преобразует число на экране.
У исполнителя есть три команды, которые обозначены латинскими буквами:
A. Прибавить 1
B. Умножить на 2
C. Возвести в квадрат
Программа для исполнителя – это последовательность команд.
Сколько существует программ, для которых при исходном числе 2 результатом является число 40, при этом траектория вычислений содержит число 10, не содержит числа 11 и не содержит числа 12?
Траектория вычислений программы – это последовательность результатов выполнения всех команд программы.
Например, для программы CBA при исходном числе 4 траектория будет состоять из чисел 16, 32, 33.
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m:
return 1
if n > m:
return 0
if n == 11:
return 0
if n == 12:
return 0
return f(n + 1, m) + f(n * 2, m) + f(n ** 2, m)
print(f(2, 10) * f(10, 40))
Ответ:22
Условие
У исполнителя есть три команды:
– вычесть 1
– вычесть 2
– разделить нацело на 4
Определите количество программ исполнителя, которые преобразуют число 26 в 3, при условии, что траектория выполнения программы содержит число 20.
В ответ запишите целое число – количество программ.
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m:
return 1
if n < m:
return 0
return f(n - 1, m) + f(n - 2, m) + f(n // 4, m)
print(f(26, 20) * f(20, 3))
Ответ:34749
Условие
Исполнитель преобразует число на экране.
У исполнителя есть три команды, которые обозначены латинскими буквами:
A. Вычти 3
B. Найди целую часть от деления на 2
C. Найди целую часть от деления на 5
Программа для исполнителя – это последовательность команд.
Сколько существует программ, для которых при исходном числе 120 результатом является число 6 и при этом траектория вычислений содержит число 49 и не содержит число 40?
Траектория вычислений программы – это последовательность результатов выполнения всех команд программы.
Например, для программы ABB при исходном числе 20 траектория состоит из чисел 17, 8, 4.
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m:
return 1
if n < m:
return 0
if n == 40:
return 0
return f(n - 3, m) + f(n // 2, m) + f(n // 5, m)
print(f(120, 49) * f(49, 6))
Ответ:40
Условие
Исполнитель преобразует число на экране.
У исполнителя есть три команды:
A. Прибавить 2
B. Умножить на 3
C. Прибавить 5
Сколько существует программ, которые преобразуют число 3 в число 50, при этом траектория вычислений содержит число 17 и не содержит число 26?
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m:
return 1
if n > m:
return 0
if n == 26:
return 0
return f(n + 2, m) + f(n * 3, m) + f(n + 5, m)
print(f(3, 17) * f(17, 50))
Ответ:1845
Условие
Исполнитель преобразует число на экране.
У исполнителя есть три команды:
A. Вычесть 4
B. Разделить нацело на 3
C. Вычесть 7
Сколько существует программ, которые преобразуют число 81 в число 4, при этом траектория вычислений содержит число 20 и не содержит число 13?
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m:
return 1
if n < m:
return 0
if n == 13:
return 0
return f(n - 4, m) + f(n // 3, m) + f(n - 7, m)
print(f(81, 20) * f(20, 4))
Ответ:830
Условие
Исполнитель преобразует число на экране.
У исполнителя есть три команды:
A. Прибавить 3
B. Умножить на 2
C. Прибавить 4
Определите количество программ, которые преобразуют число 2 в число 60, если траектория вычислений содержит число 14 и не содержит чисел 29 и 30.
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m:
return 1
if n > m:
return 0
if n == 29 or n == 30:
return 0
return f(n + 3, m) + f(n * 2, m) + f(n + 4, m)
print(f(2, 14) * f(14, 60))
Ответ:13888
Условие
Исполнитель преобразует число на экране.
У исполнителя есть три команды:
A. Вычесть 5
B. Разделить нацело на 2
C. Вычесть 3
Сколько существует программ, которые преобразуют число 100 в число 5, при этом траектория вычислений содержит число 25 и не содержит чисел 17 и 18?
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m:
return 1
if n < m:
return 0
if n == 17 or n == 18:
return 0
return f(n - 5, m) + f(n // 2, m) + f(n - 3, m)
print(f(100, 25) * f(25, 5))
Ответ:2261294
Условие
Исполнитель преобразует число на экране.
У исполнителя есть три команды:
A. Прибавить 1
B. Прибавить 4
C. Умножить на 2
Сколько существует программ, которые преобразуют число 1 в число 35, при этом траектория вычислений содержит число 9 и не содержит число 18?
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m:
return 1
if n > m:
return 0
if n == 18:
return 0
return f(n + 1, m) + f(n + 4, m) + f(n * 2, m)
print(f(1, 9) * f(9, 35))
Ответ:30192
Условие
Исполнитель преобразует число на экране.
У исполнителя есть три команды:
A. Вычесть 1
B. Разделить нацело на 2
C. Вычесть 6
Определите количество программ, которые преобразуют число 64 в число 2, при этом траектория вычислений содержит число 16 и не содержит число 10.
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m:
return 1
if n < m:
return 0
if n == 10:
return 0
return f(n - 1, m) + f(n // 2, m) + f(n - 6, m)
print(f(64, 16) * f(16, 2))
Ответ:5281980
Условие
Исполнитель преобразует число на экране.
У исполнителя есть три команды:
A. Прибавить 2
B. Умножить на 2
C. Прибавить 3
Сколько существует программ, которые преобразуют число 4 в число 48, при этом траектория вычислений содержит число 12 и не содержит число 25?
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m:
return 1
if n > m:
return 0
if n == 25:
return 0
return f(n + 2, m) + f(n * 2, m) + f(n + 3, m)
print(f(4, 12) * f(12, 48))
Ответ:40326
Условие
Исполнитель преобразует число на экране.
У исполнителя есть три команды:
A. Вычесть 2
B. Разделить нацело на 3
C. Вычесть 5
Сколько существует программ, которые преобразуют число 90 в число 6, при этом траектория вычислений содержит число 28 и не содержит число 19?
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m:
return 1
if n < m:
return 0
if n == 19:
return 0
return f(n - 2, m) + f(n // 3, m) + f(n - 5, m)
print(f(90, 28) * f(28, 6))
Ответ:4109976
Условие
Исполнитель преобразует число на экране.
У исполнителя есть три команды:
A. Прибавить 5
B. Умножить на 2
C. Прибавить 1
Определите количество программ, которые преобразуют число 5 в число 70, при этом траектория вычислений содержит число 20 и не содержит чисел 33 и 34.
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m:
return 1
if n > m:
return 0
if n == 33 or n == 34:
return 0
return f(n + 5, m) + f(n * 2, m) + f(n + 1, m)
print(f(5, 20) * f(20, 70))
Ответ:13318745
Условие
Исполнитель преобразует число на экране.
У исполнителя есть три команды:
A. Вычесть 3
B. Разделить нацело на 2
C. Вычесть 4
Сколько существует программ, которые преобразуют число 72 в число 3, при этом траектория вычислений содержит число 24 и не содержит чисел 11 и 12?
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m:
return 1
if n < m:
return 0
if n == 11 or n == 12:
return 0
return f(n - 3, m) + f(n // 2, m) + f(n - 4, m)
print(f(72, 24) * f(24, 3))
Ответ:231984
Условие
Исполнитель преобразует число на экране.
У исполнителя есть три команды:
A. Прибавить 1
B. Умножить на 3
C. Прибавить 6
Сколько существует программ, которые преобразуют число 3 в число 45, при этом траектория вычислений содержит число 15 и не содержит число 22?
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m:
return 1
if n > m:
return 0
if n == 22:
return 0
return f(n + 1, m) + f(n * 3, m) + f(n + 6, m)
print(f(3, 15) * f(15, 45))
Ответ:5512
Условие
Исполнитель преобразует число на экране.
У исполнителя есть три команды:
A. Вычесть 7
B. Разделить нацело на 2
C. Вычесть 2
Сколько существует программ, которые преобразуют число 84 в число 7, при этом траектория вычислений содержит число 21 и не содержит число 14?
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m:
return 1
if n < m:
return 0
if n == 14:
return 0
return f(n - 7, m) + f(n // 2, m) + f(n - 2, m)
print(f(84, 21) * f(21, 7))
Ответ:57108
Условие
Исполнитель преобразует число на экране.
У исполнителя есть три команды:
A. Прибавить 2
B. Умножить на 2
C. Умножить на 3
Сколько существует программ, которые преобразуют число 2 в число 54, при этом траектория вычислений содержит число 18 и не содержит число 36?
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m:
return 1
if n > m:
return 0
if n == 36:
return 0
return f(n + 2, m) + f(n * 2, m) + f(n * 3, m)
print(f(2, 18) * f(18, 54))
Ответ:90
Условие
Исполнитель преобразует число на экране.
У исполнителя есть три команды:
A. Вычесть 4
B. Разделить нацело на 2
C. Разделить нацело на 3
Сколько существует программ, которые преобразуют число 96 в число 4, при этом траектория вычислений содержит число 24 и не содержит число 8?
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m:
return 1
if n < m:
return 0
if n == 8:
return 0
return f(n - 4, m) + f(n // 2, m) + f(n // 3, m)
print(f(96, 24) * f(24, 4))
Ответ:24
Условие
Исполнитель преобразует число на экране.
У исполнителя есть три команды:
A. Прибавить 2
B. Прибавить 5
C. Умножить на 2
Сколько существует программ, которые преобразуют число 1 в число 41, при этом траектория вычислений содержит число 11 и не содержит чисел 23 и 24?
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m:
return 1
if n > m:
return 0
if n == 23 or n == 24:
return 0
return f(n + 2, m) + f(n + 5, m) + f(n * 2, m)
print(f(1, 11) * f(11, 41))
Ответ:800
Условие
Исполнитель преобразует число на экране.
У исполнителя есть три команды:
A. Вычесть 5
B. Разделить нацело на 5
C. Вычесть 2
Сколько существует программ, которые преобразуют число 75 в число 5, при этом траектория вычислений содержит число 15 и не содержит число 9?
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m:
return 1
if n < m:
return 0
if n == 9:
return 0
return f(n - 5, m) + f(n // 5, m) + f(n - 2, m)
print(f(75, 15) * f(15, 5))
Ответ:112005
Условие
Исполнитель преобразует число на экране.
У исполнителя есть три команды:
A. Прибавить 2
B. Умножить на 2
C. Прибавить 5
Сколько существует программ, которые преобразуют число 4 в число 52, при этом траектория вычислений содержит число 16 и не содержит число 31?
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m:
return 1
if n > m:
return 0
if n == 31:
return 0
return f(n + 2, m) + f(n * 2, m) + f(n + 5, m)
print(f(4, 16) * f(16, 52))
Ответ:4248
Условие
У исполнителя имеются три команды, которые обозначены латинскими буквами:
A. Вычесть 2
B. Вычесть 5
C. Найти целую часть от деления на 3
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 90 результатом является 4, при этом траектория вычислений содержит хотя бы одно из чисел 30 или 12?
Решение
from functools import lru_cache
@lru_cache(None)
def f(a, b):
if a == b:
return 1
if a < b:
return 0
return f(a - 2, b) + f(a - 5, b) + f(a // 3, b)
@lru_cache(None)
def g(a, b):
if a == 30 or a == 12:
return 0
if a == b:
return 1
if a < b:
return 0
return g(a - 2, b) + g(a - 5, b) + g(a // 3, b)
print(f(90, 4) - g(90, 4))
Ответ:21879120
Условие
У исполнителя имеются три команды, которые обозначены латинскими буквами:
A. Вычесть 2
B. Вычесть 7
C. Найти целую часть от деления на 3
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 100 результатом является 3, при этом траектория вычислений содержит ровно одно из чисел 33 или 11?
Решение
from functools import lru_cache
@lru_cache(None)
def f(a, b):
if a == b:
return 1
if a < b:
return 0
return f(a - 2, b) + f(a - 7, b) + f(a // 3, b)
@lru_cache(None)
def f1(a, b):
if a == 11:
return 0
if a == b:
return 1
if a < b:
return 0
return f1(a - 2, b) + f1(a - 7, b) + f1(a // 3, b)
@lru_cache(None)
def f2(a, b):
if a == 33:
return 0
if a == b:
return 1
if a < b:
return 0
return f2(a - 2, b) + f2(a - 7, b) + f2(a // 3, b)
print(f(100, 33) * f1(33, 3) + f2(100, 11) * f(11, 3))
Ответ:6312510
Условие
У исполнителя имеются три команды, которые обозначены латинскими буквами:
A. Вычесть 4
B. Вычесть 6
C. Найти целую часть от деления на 5
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 125 результатом является 5, при этом траектория вычислений содержит ровно одно из чисел 25 или 9?
Решение
from functools import lru_cache
@lru_cache(None)
def f(a, b):
if a == b:
return 1
if a < b:
return 0
return f(a - 4, b) + f(a - 6, b) + f(a // 5, b)
@lru_cache(None)
def f1(a, b):
if a == 9:
return 0
if a == b:
return 1
if a < b:
return 0
return f1(a - 4, b) + f1(a - 6, b) + f1(a // 5, b)
@lru_cache(None)
def f2(a, b):
if a == 25:
return 0
if a == b:
return 1
if a < b:
return 0
return f2(a - 4, b) + f2(a - 6, b) + f2(a // 5, b)
print(f(125, 25) * f1(25, 5) + f2(125, 9) * f(9, 5))
Ответ:5062707
Условие
У исполнителя имеются три команды, которые обозначены латинскими буквами:
A. Вычесть 5
B. Вычесть 8
C. Найти целую часть от деления на 3
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 96 результатом является 4, при этом траектория вычислений содержит хотя бы одно из чисел 32 или 10?
Решение
from functools import lru_cache
@lru_cache(None)
def f(a, b):
if a == b:
return 1
if a < b:
return 0
return f(a - 5, b) + f(a - 8, b) + f(a // 3, b)
@lru_cache(None)
def g(a, b):
if a == 32 or a == 10:
return 0
if a == b:
return 1
if a < b:
return 0
return g(a - 5, b) + g(a - 8, b) + g(a // 3, b)
print(f(96, 4) - g(96, 4))
Ответ:1670
Условие
У исполнителя имеются три команды, которые обозначены латинскими буквами:
A. Вычесть 6
B. Вычесть 7
C. Найти целую часть от деления на 2
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 95 результатом является 3, при этом траектория вычислений содержит ровно одно из чисел 41 или 20?
Решение
from functools import lru_cache
@lru_cache(None)
def f(a, b):
if a == b:
return 1
if a < b:
return 0
return f(a - 6, b) + f(a - 7, b) + f(a // 2, b)
@lru_cache(None)
def f1(a, b):
if a == 20:
return 0
if a == b:
return 1
if a < b:
return 0
return f1(a - 6, b) + f1(a - 7, b) + f1(a // 2, b)
@lru_cache(None)
def f2(a, b):
if a == 41:
return 0
if a == b:
return 1
if a < b:
return 0
return f2(a - 6, b) + f2(a - 7, b) + f2(a // 2, b)
print(f(95, 41) * f1(41, 3) + f2(95, 20) * f(20, 3))
Ответ:3303
Условие
У исполнителя имеются три команды, которые обозначены латинскими буквами:
A. Вычесть 4
B. Вычесть 9
C. Найти целую часть от деления на 3
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 110 результатом является 2, при этом траектория вычислений содержит хотя бы одно из чисел 36 или 12?
Решение
from functools import lru_cache
@lru_cache(None)
def f(a, b):
if a == b:
return 1
if a < b:
return 0
return f(a - 4, b) + f(a - 9, b) + f(a // 3, b)
@lru_cache(None)
def g(a, b):
if a == 36 or a == 12:
return 0
if a == b:
return 1
if a < b:
return 0
return g(a - 4, b) + g(a - 9, b) + g(a // 3, b)
print(f(110, 2) - g(110, 2))
Ответ:42399
Условие
У исполнителя имеются три команды, которые обозначены латинскими буквами:
A. Вычесть 4
B. Вычесть 6
C. Найти целую часть от деления на 3
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 72 результатом является 4, при этом траектория вычислений содержит хотя бы одно из чисел 24 или 9?
Решение
from functools import lru_cache
@lru_cache(None)
def f(a, b):
if a == b:
return 1
if a < b:
return 0
return f(a - 4, b) + f(a - 6, b) + f(a // 3, b)
@lru_cache(None)
def g(a, b):
if a == 24 or a == 9:
return 0
if a == b:
return 1
if a < b:
return 0
return g(a - 4, b) + g(a - 6, b) + g(a // 3, b)
print(f(72, 4) - g(72, 4))
Ответ:4224
Условие
У исполнителя имеются три команды, которые обозначены латинскими буквами:
A. Вычесть 5
B. Вычесть 7
C. Найти целую часть от деления на 4
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 84 результатом является 3, при этом траектория вычислений содержит ровно одно из чисел 21 или 8?
Решение
from functools import lru_cache
@lru_cache(None)
def f(a, b):
if a == b:
return 1
if a < b:
return 0
return f(a - 5, b) + f(a - 7, b) + f(a // 4, b)
@lru_cache(None)
def f1(a, b):
if a == 8:
return 0
if a == b:
return 1
if a < b:
return 0
return f1(a - 5, b) + f1(a - 7, b) + f1(a // 4, b)
@lru_cache(None)
def f2(a, b):
if a == 21:
return 0
if a == b:
return 1
if a < b:
return 0
return f2(a - 5, b) + f2(a - 7, b) + f2(a // 4, b)
print(f(84, 21) * f1(21, 3) + f2(84, 8) * f(8, 3))
Ответ:1448
Условие
У исполнителя имеются три команды, которые обозначены латинскими буквами:
A. Вычесть 3
B. Вычесть 5
C. Найти целую часть от деления на 2
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 66 результатом является 2, при этом траектория вычислений содержит ровно одно из чисел 30 или 14?
Решение
from functools import lru_cache
@lru_cache(None)
def f(a, b):
if a == b:
return 1
if a < b:
return 0
return f(a - 3, b) + f(a - 5, b) + f(a // 2, b)
@lru_cache(None)
def f1(a, b):
if a == 14:
return 0
if a == b:
return 1
if a < b:
return 0
return f1(a - 3, b) + f1(a - 5, b) + f1(a // 2, b)
@lru_cache(None)
def f2(a, b):
if a == 30:
return 0
if a == b:
return 1
if a < b:
return 0
return f2(a - 3, b) + f2(a - 5, b) + f2(a // 2, b)
print(f(66, 30) * f1(30, 2) + f2(66, 14) * f(14, 2))
Ответ:50327
Условие
У исполнителя имеются три команды, которые обозначены латинскими буквами:
A. Вычесть 4
B. Вычесть 9
C. Найти целую часть от деления на 3
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 81 результатом является 4, при этом траектория вычислений содержит хотя бы одно из чисел 27 или 8?
Решение
from functools import lru_cache
@lru_cache(None)
def f(a, b):
if a == b:
return 1
if a < b:
return 0
return f(a - 4, b) + f(a - 9, b) + f(a // 3, b)
@lru_cache(None)
def g(a, b):
if a == 27 or a == 8:
return 0
if a == b:
return 1
if a < b:
return 0
return g(a - 4, b) + g(a - 9, b) + g(a // 3, b)
print(f(81, 4) - g(81, 4))
Ответ:1353
Условие
У исполнителя имеются три команды, которые обозначены латинскими буквами:
A. Прибавить 2
B. Умножить на 2
C. Прибавить 5
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 3 результатом является 60, при этом траектория вычислений содержит ровно одно из чисел 17 или 40?
Решение
from functools import lru_cache
@lru_cache(None)
def f(a, b):
if a == b:
return 1
if a > b:
return 0
return f(a + 2, b) + f(a * 2, b) + f(a + 5, b)
@lru_cache(None)
def f1(a, b):
if a == 40:
return 0
if a == b:
return 1
if a > b:
return 0
return f1(a + 2, b) + f1(a * 2, b) + f1(a + 5, b)
@lru_cache(None)
def f2(a, b):
if a == 17:
return 0
if a == b:
return 1
if a > b:
return 0
return f2(a + 2, b) + f2(a * 2, b) + f2(a + 5, b)
print(f(3, 17) * f1(17, 60) + f2(3, 40) * f(40, 60))
Ответ:65258
Условие
У исполнителя имеются три команды, которые обозначены латинскими буквами:
A. Прибавить 3
B. Умножить на 2
C. Умножить на 3
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 2 результатом является 72, при этом траектория вычислений содержит хотя бы одно из чисел 12 или 36?
Решение
from functools import lru_cache
@lru_cache(None)
def f(a, b):
if a == b:
return 1
if a > b:
return 0
return f(a + 3, b) + f(a * 2, b) + f(a * 3, b)
@lru_cache(None)
def g(a, b):
if a == 12 or a == 36:
return 0
if a == b:
return 1
if a > b:
return 0
return g(a + 3, b) + g(a * 2, b) + g(a * 3, b)
print(f(2, 72) - g(2, 72))
Ответ:108
Условие
У исполнителя имеются три команды, которые обозначены латинскими буквами:
A. Прибавить 4
B. Умножить на 2
C. Возвести в квадрат
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 2 результатом является 100, при этом траектория вычислений содержит ровно одно из чисел 16 или 64?
Решение
from functools import lru_cache
@lru_cache(None)
def f(a, b):
if a == b:
return 1
if a > b:
return 0
return f(a + 4, b) + f(a * 2, b) + f(a ** 2, b)
@lru_cache(None)
def f1(a, b):
if a == 64:
return 0
if a == b:
return 1
if a > b:
return 0
return f1(a + 4, b) + f1(a * 2, b) + f1(a ** 2, b)
@lru_cache(None)
def f2(a, b):
if a == 16:
return 0
if a == b:
return 1
if a > b:
return 0
return f2(a + 4, b) + f2(a * 2, b) + f2(a ** 2, b)
print(f(2, 16) * f1(16, 100) + f2(2, 64) * f(64, 100))
Ответ:169
Условие
У исполнителя имеются три команды, которые обозначены латинскими буквами:
A. Прибавить 5
B. Умножить на 2
C. Прибавить 7
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 1 результатом является 64, при этом траектория вычислений содержит хотя бы одно из чисел 15 или 32?
Решение
from functools import lru_cache
@lru_cache(None)
def f(a, b):
if a == b:
return 1
if a > b:
return 0
return f(a + 5, b) + f(a * 2, b) + f(a + 7, b)
@lru_cache(None)
def g(a, b):
if a == 15 or a == 32:
return 0
if a == b:
return 1
if a > b:
return 0
return g(a + 5, b) + g(a * 2, b) + g(a + 7, b)
print(f(1, 64) - g(1, 64))
Ответ:291
Условие
У исполнителя имеются три команды, которые обозначены латинскими буквами:
A. Прибавить 3
B. Умножить на 2
C. Прибавить 8
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 5 результатом является 77, при этом траектория вычислений содержит ровно одно из чисел 21 или 40?
Решение
from functools import lru_cache
@lru_cache(None)
def f(a, b):
if a == b:
return 1
if a > b:
return 0
return f(a + 3, b) + f(a * 2, b) + f(a + 8, b)
@lru_cache(None)
def f1(a, b):
if a == 40:
return 0
if a == b:
return 1
if a > b:
return 0
return f1(a + 3, b) + f1(a * 2, b) + f1(a + 8, b)
@lru_cache(None)
def f2(a, b):
if a == 21:
return 0
if a == b:
return 1
if a > b:
return 0
return f2(a + 3, b) + f2(a * 2, b) + f2(a + 8, b)
print(f(5, 21) * f1(21, 77) + f2(5, 40) * f(40, 77))
Ответ:2736
Условие
У исполнителя имеются три команды, которые обозначены латинскими буквами:
A. Прибавить 2
B. Умножить на 2
C. Умножить на 4
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 2 результатом является 128, при этом траектория вычислений содержит хотя бы одно из чисел 8 или 32?
Решение
from functools import lru_cache
@lru_cache(None)
def f(a, b):
if a == b:
return 1
if a > b:
return 0
return f(a + 2, b) + f(a * 2, b) + f(a * 4, b)
@lru_cache(None)
def g(a, b):
if a == 8 or a == 32:
return 0
if a == b:
return 1
if a > b:
return 0
return g(a + 2, b) + g(a * 2, b) + g(a * 4, b)
print(f(2, 128) - g(2, 128))
Ответ:2540
Условие
У исполнителя имеются три команды, которые обозначены латинскими буквами:
A. Прибавить 2
B. Умножить на 5
C. Умножить на 2
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 1 результатом является 125, при этом траектория вычислений содержит ровно одно из чисел 5 или 25?
Решение
from functools import lru_cache
@lru_cache(None)
def f(a, b):
if a == b:
return 1
if a > b:
return 0
return f(a + 2, b) + f(a * 5, b) + f(a * 2, b)
@lru_cache(None)
def f1(a, b):
if a == 25:
return 0
if a == b:
return 1
if a > b:
return 0
return f1(a + 2, b) + f1(a * 5, b) + f1(a * 2, b)
@lru_cache(None)
def f2(a, b):
if a == 5:
return 0
if a == b:
return 1
if a > b:
return 0
return f2(a + 2, b) + f2(a * 5, b) + f2(a * 2, b)
print(f(1, 5) * f1(5, 125) + f2(1, 25) * f(25, 125))
Ответ:20
Условие
У исполнителя имеются три команды, которые обозначены латинскими буквами:
A. Прибавить 2
B. Умножить на 2
C. Умножить на 3
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 2 результатом является 54, при этом траектория вычислений содержит ровно одно из чисел 6 или 18?
Решение
from functools import lru_cache
@lru_cache(None)
def f(a, b):
if a == b:
return 1
if a > b:
return 0
return f(a + 2, b) + f(a * 2, b) + f(a * 3, b)
@lru_cache(None)
def f1(a, b):
if a == 18:
return 0
if a == b:
return 1
if a > b:
return 0
return f1(a + 2, b) + f1(a * 2, b) + f1(a * 3, b)
@lru_cache(None)
def f2(a, b):
if a == 6:
return 0
if a == b:
return 1
if a > b:
return 0
return f2(a + 2, b) + f2(a * 2, b) + f2(a * 3, b)
print(f(2, 6) * f1(6, 54) + f2(2, 18) * f(18, 54))
Ответ:123
Условие
У исполнителя имеются три команды, которые обозначены латинскими буквами:
A. Прибавить 2
B. Умножить на 2
C. Прибавить 5
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 3 результатом является 50, при этом траектория вычислений содержит хотя бы одно из чисел 13 или 26?
Решение
from functools import lru_cache
@lru_cache(None)
def f(a, b):
if a == b:
return 1
if a > b:
return 0
return f(a + 2, b) + f(a * 2, b) + f(a + 5, b)
@lru_cache(None)
def g(a, b):
if a == 13 or a == 26:
return 0
if a == b:
return 1
if a > b:
return 0
return g(a + 2, b) + g(a * 2, b) + g(a + 5, b)
print(f(3, 50) - g(3, 50))
Ответ:8388
Условие
У исполнителя имеются три команды, которые обозначены латинскими буквами:
A. Прибавить 3
B. Умножить на 2
C. Прибавить 4
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 2 результатом является 64, при этом траектория вычислений содержит ровно одно из чисел 14 или 32?
Решение
from functools import lru_cache
@lru_cache(None)
def f(a, b):
if a == b:
return 1
if a > b:
return 0
return f(a + 3, b) + f(a * 2, b) + f(a + 4, b)
@lru_cache(None)
def f1(a, b):
if a == 32:
return 0
if a == b:
return 1
if a > b:
return 0
return f1(a + 3, b) + f1(a * 2, b) + f1(a + 4, b)
@lru_cache(None)
def f2(a, b):
if a == 14:
return 0
if a == b:
return 1
if a > b:
return 0
return f2(a + 3, b) + f2(a * 2, b) + f2(a + 4, b)
print(f(2, 14) * f1(14, 64) + f2(2, 32) * f(32, 64))
Ответ:84776
Условие
Исполнитель преобразует число на экране.
У исполнителя есть пять команд, обозначенных латинскими буквами:
A. Вычесть 1
B. Извлечь квадратный корень, если результат целый
C. Извлечь кубический корень, если результат целый
D. Отбросить последнюю цифру числа
E. Если число чётное, разделить на 2, иначе вычесть 3
Сколько существует программ, для которых при исходном числе 512 результатом является 1, при этом траектория вычислений содержит ровно одно из чисел 8 или 64, и никакая команда не повторяется более двух раз подряд?
В ответе запишите квадрат суммы цифр полученного количества программ.
Решение
from functools import lru_cache
import math
def is_square(n):
r = int(math.isqrt(n))
return r * r == n
def cube_root_int(n):
r = round(n ** (1 / 3))
while (r + 1) ** 3 <= n:
r += 1
while r ** 3 > n:
r -= 1
return r if r ** 3 == n else None
def sum_digits(n):
return sum(map(int, str(n)))
@lru_cache(None)
def f(n, last='', streak=0, has8=False, has64=False):
if n == 1:
return 1 if (has8 ^ has64) else 0
if n < 1:
return 0
ans = 0
moves = [('A', n - 1)]
if is_square(n):
r = int(math.isqrt(n))
if r < n:
moves.append(('B', r))
r = cube_root_int(n)
if r is not None and r < n:
moves.append(('C', r))
if n > 9:
moves.append(('D', n // 10))
x = n // 2 if n % 2 == 0 else n - 3
if x >= 1 and x < n:
moves.append(('E', x))
for cmd, nxt in moves:
new_streak = streak + 1 if cmd == last else 1
if new_streak <= 2:
ans += f(nxt, cmd, new_streak, has8 or nxt == 8, has64 or nxt == 64)
return ans
raw = f(512)
print(sum_digits(raw) ** 2)
Ответ:676
Условие
Исполнитель преобразует число на экране.
Команды:
A. Прибавить 1
B. Прибавить 5
C. Умножить на 2
D. Прибавить 3
E. Прибавить сумму цифр числа
Сколько существует программ, которые преобразуют число 5 в число 34, если:
- траектория содержит ровно одно из чисел 17 или 40;
- команда A не повторяется более двух раз подряд;
- команда D используется ровно один раз.
В ответе запишите остаток от деления количества программ на 97.
Решение
from functools import lru_cache
def sum_digits(n):
return sum(map(int, str(n)))
@lru_cache(None)
def f(n, last='', streak=0, has17=False, has40=False, dcount=0):
if n == 34:
return 1 if (has17 ^ has40) and dcount == 1 else 0
if n > 34 or n < 0:
return 0
ans = 0
new_streak = streak + 1 if last == 'A' else 1
if new_streak <= 2:
ans += f(n + 1, 'A', new_streak, has17 or n + 1 == 17, has40 or n + 1 == 40, dcount)
ans += f(n + 5, 'B', 1, has17 or n + 5 == 17, has40 or n + 5 == 40, dcount)
ans += f(n * 2, 'C', 1, has17 or n * 2 == 17, has40 or n * 2 == 40, dcount)
if dcount < 1:
ans += f(n + 3, 'D', 1, has17 or n + 3 == 17, has40 or n + 3 == 40, dcount + 1)
x = n + sum_digits(n)
ans += f(x, 'E', 1, has17 or x == 17, has40 or x == 40, dcount)
return ans
raw = f(5)
print(raw % 97)
Ответ:96
Условие
Исполнитель преобразует число на экране.
Команды:
A. Вычесть 1
B. Найти целую часть квадратного корня
C. Отбросить последнюю цифру
D. Если число чётное, разделить на 2, иначе вычесть 7
E. Извлечь кубический корень, если результат целый
Сколько существует программ, которые преобразуют число 602 в число 7, если:
- траектория содержит хотя бы одно из чисел 60 или 10;
- траектория не содержит 24;
- команда A не повторяется более трёх раз подряд.
В ответе запишите сумму двух максимальных цифр числа программ.
Решение
from functools import lru_cache
import math
def cube_root_int(n):
r = round(n ** (1 / 3))
while (r + 1) ** 3 <= n:
r += 1
while r ** 3 > n:
r -= 1
return r if r ** 3 == n else None
@lru_cache(None)
def f(n, has60=False, has10=False, last='', streak=0):
if n == 7:
return 1 if (has60 or has10) else 0
if n < 7 or n == 24:
return 0
ans = 0
ns = streak + 1 if last == 'A' else 1
if ns <= 3:
ans += f(n - 1, has60 or n - 1 == 60, has10 or n - 1 == 10, 'A', ns)
r = int(math.isqrt(n))
if r < n:
ans += f(r, has60 or r == 60, has10 or r == 10, 'B', 1)
if n > 9:
x = n // 10
ans += f(x, has60 or x == 60, has10 or x == 10, 'C', 1)
x = n // 2 if n % 2 == 0 else n - 7
if x < n and x >= 0:
ans += f(x, has60 or x == 60, has10 or x == 10, 'D', 1)
r = cube_root_int(n)
if r is not None and r < n:
ans += f(r, has60 or r == 60, has10 or r == 10, 'E', 1)
return ans
raw = f(602)
digits = sorted(map(int, str(raw)), reverse=True)
print(digits[0] + digits[1])
Ответ:16
Условие
Исполнитель преобразует число на экране.
Команды:
A. Вычесть 2
B. Вычесть 3
C. Найти целую часть от деления на 5
D. Извлечь квадратный корень, если результат целый
E. Отбросить последнюю цифру
Сколько существует программ, которые преобразуют число 63 в число 3, если траектория содержит ровно одно из чисел 25 или 47?
Команду E нельзя применять более двух раз подряд.
В ответе запишите остаток от деления суммы цифр количества программ на 13.
Решение
from functools import lru_cache
import math
def is_square(n):
r = int(math.isqrt(n))
return r * r == n
def sum_digits(n):
return sum(map(int, str(n)))
@lru_cache(None)
def f(n, has25=False, has47=False, last='', streak=0):
if n == 3:
return 1 if (has25 ^ has47) else 0
if n < 3:
return 0
ans = 0
ans += f(n - 2, has25 or n - 2 == 25, has47 or n - 2 == 47, 'A', 1)
ans += f(n - 3, has25 or n - 3 == 25, has47 or n - 3 == 47, 'B', 1)
x = n // 5
if x < n:
ans += f(x, has25 or x == 25, has47 or x == 47, 'C', 1)
if is_square(n):
x = int(math.isqrt(n))
if x < n:
ans += f(x, has25 or x == 25, has47 or x == 47, 'D', 1)
if n > 9:
ns = streak + 1 if last == 'E' else 1
if ns <= 2:
x = n // 10
ans += f(x, has25 or x == 25, has47 or x == 47, 'E', ns)
return ans
raw = f(63)
print(sum_digits(raw) % 13)
Ответ:9
Условие
Исполнитель преобразует число на экране.
Команды:
A. Прибавить 3
B. Умножить на 2
C. Прибавить 5
D. Возвести в квадрат
E. Прибавить сумму цифр
Сколько существует программ, которые преобразуют число 2 в число 80, если:
- траектория содержит хотя бы одно из чисел 18 или 38;
- команда B используется ровно два раза.
В ответе запишите квадрат суммы цифр количества программ.
Решение
from functools import lru_cache
def sum_digits(n):
return sum(map(int, str(n)))
@lru_cache(None)
def f(n, bcount=0, has18=False, has38=False):
if n == 80:
return 1 if (has18 or has38) and bcount == 2 else 0
if n > 80 or n < 0:
return 0
ans = 0
ans += f(n + 3, bcount, has18 or n + 3 == 18, has38 or n + 3 == 38)
if bcount < 2:
ans += f(n * 2, bcount + 1, has18 or n * 2 == 18, has38 or n * 2 == 38)
ans += f(n + 5, bcount, has18 or n + 5 == 18, has38 or n + 5 == 38)
x = n * n
if x <= 80:
ans += f(x, bcount, has18 or x == 18, has38 or x == 38)
x = n + sum_digits(n)
if x <= 80:
ans += f(x, bcount, has18 or x == 18, has38 or x == 38)
return ans
raw = f(2)
print(sum_digits(raw) ** 2)
Ответ:1764
Условие
Исполнитель преобразует число на экране.
Команды:
A. Вычесть 4
B. Вычесть 7
C. Если число чётное, разделить на 2, иначе вычесть 5
D. Найти целую часть квадратного корня
E. Отбросить последнюю цифру
Сколько существует программ, которые преобразуют число 150 в число 2, если:
- траектория содержит хотя бы одно из чисел 50 или 21;
- команда D используется нечётное число раз, но не более 3 раз.
В ответе запишите остаток от деления количества программ на 101.
Решение
from functools import lru_cache
import math
@lru_cache(None)
def f(n, dcount=0, has50=False, has21=False):
if n == 2:
return 1 if (has50 or has21) and dcount % 2 == 1 else 0
if n < 2:
return 0
ans = 0
ans += f(n - 4, dcount, has50 or n - 4 == 50, has21 or n - 4 == 21)
ans += f(n - 7, dcount, has50 or n - 7 == 50, has21 or n - 7 == 21)
x = n // 2 if n % 2 == 0 else n - 5
if x < n:
ans += f(x, dcount, has50 or x == 50, has21 or x == 21)
x = int(math.isqrt(n))
if x < n and dcount < 3:
ans += f(x, dcount + 1, has50 or x == 50, has21 or x == 21)
if n > 9:
x = n // 10
ans += f(x, dcount, has50 or x == 50, has21 or x == 21)
return ans
raw = f(150)
print(raw % 101)
Ответ:36
Условие
Исполнитель преобразует число на экране.
Команды:
A. Вычесть 1
B. Извлечь квадратный корень, если результат целый
C. Извлечь кубический корень, если результат целый
D. Если число чётное, разделить на 2, иначе вычесть 2
E. Отбросить последнюю цифру
Сколько существует программ, которые преобразуют число 729 в число 1, если:
- траектория содержит ровно одно из чисел 27 или 64;
- никакая команда не повторяется более двух раз подряд.
В ответе запишите остаток от деления суммы цифр количества программ на 11.
Решение
from functools import lru_cache
import math
def is_square(n):
r = int(math.isqrt(n))
return r * r == n
def cube_root_int(n):
r = round(n ** (1 / 3))
while (r + 1) ** 3 <= n:
r += 1
while r ** 3 > n:
r -= 1
return r if r ** 3 == n else None
def sum_digits(n):
return sum(map(int, str(n)))
@lru_cache(None)
def f(n, has27=False, has64=False, last='', streak=0):
if n == 1:
return 1 if (has27 ^ has64) else 0
if n < 1:
return 0
ans = 0
moves = [('A', n - 1)]
if is_square(n):
x = int(math.isqrt(n))
if x < n:
moves.append(('B', x))
r = cube_root_int(n)
if r is not None and r < n:
moves.append(('C', r))
x = n // 2 if n % 2 == 0 else n - 2
if x >= 1 and x < n:
moves.append(('D', x))
if n > 9:
x = n // 10
if x < n:
moves.append(('E', x))
for cmd, nxt in moves:
ns = streak + 1 if cmd == last else 1
if ns <= 2:
ans += f(nxt, has27 or nxt == 27, has64 or nxt == 64, cmd, ns)
return ans
raw = f(729)
print(sum_digits(raw) % 11)
Ответ:5
Условие
Исполнитель преобразует число на экране.
Команды:
A. Прибавить 2
B. Прибавить 4
C. Умножить на 2
D. Умножить на 3
E. Прибавить сумму цифр
Сколько существует программ, которые преобразуют число 3 в число 90, если:
- траектория содержит ровно одно из чисел 19 или 36;
- команда E используется хотя бы один раз.
В ответе запишите сумму двух наибольших цифр количества программ.
Решение
from functools import lru_cache
def sum_digits(n):
return sum(map(int, str(n)))
@lru_cache(None)
def f(n, has19=False, has36=False, eused=False):
if n == 90:
return 1 if (has19 ^ has36) and eused else 0
if n > 90:
return 0
ans = 0
moves = [
(n + 2, eused),
(n + 4, eused),
(n * 2, eused),
(n * 3, eused),
(n + sum_digits(n), True)
]
for nxt, flag in moves:
if nxt <= 90:
ans += f(nxt, has19 or nxt == 19, has36 or nxt == 36, flag)
return ans
raw = f(3)
digits = sorted(map(int, str(raw)), reverse=True)
print(digits[0] + digits[1])
Ответ:17
Условие
Исполнитель преобразует число на экране.
Команды:
A. Вычесть 3
B. Найти целую часть квадратного корня
C. Отбросить последнюю цифру
D. Если число чётное, разделить на 2, иначе вычесть 5
E. Извлечь кубический корень, если результат целый
Сколько существует программ, которые преобразуют число 999 в число 4, если:
- траектория содержит хотя бы одно из чисел 99 или 31;
- траектория не содержит 24.
В ответе запишите квадрат суммы цифр количества программ.
Решение
from functools import lru_cache
import math
def cube_root_int(n):
r = round(n ** (1 / 3))
while (r + 1) ** 3 <= n:
r += 1
while r ** 3 > n:
r -= 1
return r if r ** 3 == n else None
def sum_digits(n):
return sum(map(int, str(n)))
@lru_cache(None)
def f(n, has99=False, has31=False):
if n == 4:
return 1 if (has99 or has31) else 0
if n < 4 or n == 24:
return 0
ans = 0
x = n - 3
ans += f(x, has99 or x == 99, has31 or x == 31)
x = int(math.isqrt(n))
if x < n:
ans += f(x, has99 or x == 99, has31 or x == 31)
if n > 9:
x = n // 10
ans += f(x, has99 or x == 99, has31 or x == 31)
x = n // 2 if n % 2 == 0 else n - 5
if x < n and x >= 1:
ans += f(x, has99 or x == 99, has31 or x == 31)
r = cube_root_int(n)
if r is not None and r < n:
ans += f(r, has99 or r == 99, has31 or r == 31)
return ans
raw = f(999)
print(sum_digits(raw) ** 2)
Ответ:32041
Условие
Исполнитель преобразует число на экране.
Команды:
A. Прибавить 1
B. Прибавить 6
C. Умножить на 2
D. Возвести в квадрат
E. Прибавить наибольшую цифру числа
Сколько существует программ, которые преобразуют число 4 в число 72, если:
- траектория содержит хотя бы одно из чисел 15 или 33;
- команда A не повторяется более двух раз подряд;
- команда D используется ровно один раз.
В ответе запишите остаток от деления количества программ на 89.
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, last='', streak=0, dcount=0, has15=False, has33=False):
if n == 72:
return 1 if (has15 or has33) and dcount == 1 else 0
if n > 72:
return 0
ans = 0
ns = streak + 1 if last == 'A' else 1
if ns <= 2:
ans += f(n + 1, 'A', ns, dcount, has15 or n + 1 == 15, has33 or n + 1 == 33)
ans += f(n + 6, 'B', 1, dcount, has15 or n + 6 == 15, has33 or n + 6 == 33)
ans += f(n * 2, 'C', 1, dcount, has15 or n * 2 == 15, has33 or n * 2 == 33)
x = n * n
if x <= 72 and dcount < 1:
ans += f(x, 'D', 1, dcount + 1, has15 or x == 15, has33 or x == 33)
x = n + max(map(int, str(n)))
if x <= 72:
ans += f(x, 'E', 1, dcount, has15 or x == 15, has33 or x == 33)
return ans
raw = f(4)
print(raw % 89)
Ответ:9
Условие
Исполнитель преобразует число на экране.
Команды:
A. Вычесть 1
B. Извлечь квадратный корень, если результат целый
C. Извлечь кубический корень, если результат целый
D. Если число чётное, разделить на 2, иначе вычесть 3
E. Отбросить последнюю цифру
Сколько существует программ, которые преобразуют число 256 в число 2, если:
- траектория содержит ровно одно из чисел 16 или 64;
- команда B используется хотя бы один раз.
В ответе запишите сумму двух максимальных цифр количества программ.
Решение
from functools import lru_cache
import math
def is_square(n):
r = int(math.isqrt(n))
return r * r == n
def cube_root_int(n):
r = round(n ** (1 / 3))
while (r + 1) ** 3 <= n:
r += 1
while r ** 3 > n:
r -= 1
return r if r ** 3 == n else None
@lru_cache(None)
def f(n, has16=False, has64=False, bused=False):
if n == 2:
return 1 if (has16 ^ has64) and bused else 0
if n < 2:
return 0
ans = 0
ans += f(n - 1, has16 or n - 1 == 16, has64 or n - 1 == 64, bused)
if is_square(n):
x = int(math.isqrt(n))
if x < n:
ans += f(x, has16 or x == 16, has64 or x == 64, True)
r = cube_root_int(n)
if r is not None and r < n:
ans += f(r, has16 or r == 16, has64 or r == 64, bused)
x = n // 2 if n % 2 == 0 else n - 3
if x < n and x >= 1:
ans += f(x, has16 or x == 16, has64 or x == 64, bused)
if n > 9:
x = n // 10
ans += f(x, has16 or x == 16, has64 or x == 64, bused)
return ans
raw = f(256)
digits = sorted(map(int, str(raw)), reverse=True)
print(digits[0] + digits[1])
Ответ:18
Условие
Исполнитель преобразует число на экране.
Команды:
A. Прибавить 2
B. Умножить на 2
C. Умножить на 3
D. Прибавить 5
E. Прибавить сумму цифр числа
Сколько существует программ, которые преобразуют число 2 в число 96, если:
- траектория содержит хотя бы одно из чисел 18 или 54;
- команда C используется ровно один раз.
В ответе запишите остаток от деления суммы цифр количества программ на 19.
Решение
from functools import lru_cache
def sum_digits(n):
return sum(map(int, str(n)))
@lru_cache(None)
def f(n, ccount=0, has18=False, has54=False):
if n == 96:
return 1 if (has18 or has54) and ccount == 1 else 0
if n > 96:
return 0
ans = 0
ans += f(n + 2, ccount, has18 or n + 2 == 18, has54 or n + 2 == 54)
ans += f(n * 2, ccount, has18 or n * 2 == 18, has54 or n * 2 == 54)
if ccount < 1:
ans += f(n * 3, ccount + 1, has18 or n * 3 == 18, has54 or n * 3 == 54)
ans += f(n + 5, ccount, has18 or n + 5 == 18, has54 or n + 5 == 54)
x = n + sum_digits(n)
if x <= 96:
ans += f(x, ccount, has18 or x == 18, has54 or x == 54)
return ans
raw = f(2)
print(sum_digits(raw) % 19)
Ответ:16
Условие
Исполнитель преобразует число на экране.
Команды:
A. Вычесть 2
B. Вычесть 5
C. Найти целую часть от деления на 3
D. Извлечь квадратный корень, если результат целый
E. Отбросить последнюю цифру
Сколько существует программ, которые преобразуют число 144 в число 3, если:
- траектория содержит ровно одно из чисел 48 или 12;
- траектория не содержит 24.
В ответе запишите квадрат суммы цифр количества программ.
Решение
from functools import lru_cache
import math
def is_square(n):
r = int(math.isqrt(n))
return r * r == n
def sum_digits(n):
return sum(map(int, str(n)))
@lru_cache(None)
def f(n, has48=False, has12=False):
if n == 3:
return 1 if (has48 ^ has12) else 0
if n < 3 or n == 24:
return 0
ans = 0
ans += f(n - 2, has48 or n - 2 == 48, has12 or n - 2 == 12)
ans += f(n - 5, has48 or n - 5 == 48, has12 or n - 5 == 12)
x = n // 3
if x < n:
ans += f(x, has48 or x == 48, has12 or x == 12)
if is_square(n):
x = int(math.isqrt(n))
if x < n:
ans += f(x, has48 or x == 48, has12 or x == 12)
if n > 9:
x = n // 10
ans += f(x, has48 or x == 48, has12 or x == 12)
return ans
raw = f(144)
print(sum_digits(raw) ** 2)
Ответ:2601
Условие
Исполнитель преобразует число на экране.
Команды:
A. Прибавить 1
B. Прибавить 4
C. Умножить на 2
D. Возвести в квадрат
E. Прибавить наибольшую цифру числа
Сколько существует программ, которые преобразуют число 3 в число 81, если:
- траектория содержит хотя бы одно из чисел 9 или 27;
- никакая команда не повторяется более двух раз подряд.
В ответе запишите сумму двух максимальных цифр количества программ.
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, last='', streak=0, has9=False, has27=False):
if n == 81:
return 1 if (has9 or has27) else 0
if n > 81:
return 0
ans = 0
for cmd, x in [
('A', n + 1),
('B', n + 4),
('C', n * 2),
('D', n * n),
('E', n + max(map(int, str(n))))
]:
if x <= 81:
ns = streak + 1 if cmd == last else 1
if ns <= 2:
ans += f(x, cmd, ns, has9 or x == 9, has27 or x == 27)
return ans
raw = f(3)
digits = sorted(map(int, str(raw)), reverse=True)
print(digits[0] + digits[1])
Ответ:16
Условие
Исполнитель преобразует число на экране.
Команды:
A. Вычесть 3
B. Извлечь квадратный корень, если результат целый
C. Извлечь кубический корень, если результат целый
D. Если число чётное, разделить на 4, иначе вычесть 5
E. Отбросить последнюю цифру
Сколько существует программ, которые преобразуют число 320 в число 2, если:
- траектория содержит ровно одно из чисел 80 или 20;
- команда E используется хотя бы один раз.
В ответе запишите остаток от деления количества программ на 73.
Решение
from functools import lru_cache
import math
def is_square(n):
r = int(math.isqrt(n))
return r * r == n
def cube_root_int(n):
r = round(n ** (1 / 3))
while (r + 1) ** 3 <= n:
r += 1
while r ** 3 > n:
r -= 1
return r if r ** 3 == n else None
@lru_cache(None)
def f(n, has80=False, has20=False, eused=False):
if n == 2:
return 1 if (has80 ^ has20) and eused else 0
if n < 2:
return 0
ans = 0
ans += f(n - 3, has80 or n - 3 == 80, has20 or n - 3 == 20, eused)
if is_square(n):
x = int(math.isqrt(n))
if x < n:
ans += f(x, has80 or x == 80, has20 or x == 20, eused)
r = cube_root_int(n)
if r is not None and r < n:
ans += f(r, has80 or r == 80, has20 or r == 20, eused)
x = n // 4 if n % 2 == 0 else n - 5
if x < n and x >= 1:
ans += f(x, has80 or x == 80, has20 or x == 20, eused)
if n > 9:
x = n // 10
if x < n:
ans += f(x, has80 or x == 80, has20 or x == 20, True)
return ans
raw = f(320)
print(raw % 73)
Ответ:64
Условие
Исполнитель преобразует число на экране.
Команды:
A. Прибавить 2
B. Прибавить 7
C. Умножить на 2
D. Умножить на 3
E. Прибавить сумму цифр
Сколько существует программ, которые преобразуют число 4 в число 100, если:
- траектория содержит ровно одно из чисел 20 или 54;
- команда A используется нечётное число раз.
В ответе запишите остаток от деления суммы цифр количества программ на 17.
Решение
from functools import lru_cache
def sum_digits(n):
return sum(map(int, str(n)))
@lru_cache(None)
def f(n, acount=0, has20=False, has54=False):
if n == 100:
return 1 if (has20 ^ has54) and acount % 2 == 1 else 0
if n > 100:
return 0
ans = 0
ans += f(n + 2, acount + 1, has20 or n + 2 == 20, has54 or n + 2 == 54)
ans += f(n + 7, acount, has20 or n + 7 == 20, has54 or n + 7 == 54)
ans += f(n * 2, acount, has20 or n * 2 == 20, has54 or n * 2 == 54)
ans += f(n * 3, acount, has20 or n * 3 == 20, has54 or n * 3 == 54)
x = n + sum_digits(n)
if x <= 100:
ans += f(x, acount, has20 or x == 20, has54 or x == 54)
return ans
raw = f(4)
print(sum_digits(raw) % 17)
Ответ:9
Условие
Исполнитель преобразует число на экране.
Команды:
A. Вычесть 6
B. Найти целую часть квадратного корня
C. Отбросить последнюю цифру
D. Если число чётное, разделить на 2, иначе вычесть 9
E. Извлечь кубический корень, если результат целый
Сколько существует программ, которые преобразуют число 777 в число 6, если:
- траектория содержит хотя бы одно из чисел 77 или 27;
- команда B используется хотя бы один раз.
В ответе запишите сумму двух максимальных цифр количества программ.
Решение
from functools import lru_cache
import math
def cube_root_int(n):
r = round(n ** (1 / 3))
while (r + 1) ** 3 <= n:
r += 1
while r ** 3 > n:
r -= 1
return r if r ** 3 == n else None
@lru_cache(None)
def f(n, has77=False, has27=False, bused=False):
if n == 6:
return 1 if (has77 or has27) and bused else 0
if n < 6:
return 0
ans = 0
ans += f(n - 6, has77 or n - 6 == 77, has27 or n - 6 == 27, bused)
x = int(math.isqrt(n))
if x < n:
ans += f(x, has77 or x == 77, has27 or x == 27, True)
if n > 9:
x = n // 10
ans += f(x, has77 or x == 77, has27 or x == 27, bused)
x = n // 2 if n % 2 == 0 else n - 9
if x < n and x >= 1:
ans += f(x, has77 or x == 77, has27 or x == 27, bused)
r = cube_root_int(n)
if r is not None and r < n:
ans += f(r, has77 or r == 77, has27 or r == 27, bused)
return ans
raw = f(777)
digits = sorted(map(int, str(raw)), reverse=True)
print(digits[0] + digits[1])
Ответ:3
Условие
Исполнитель преобразует число на экране.
Команды:
A. Прибавить 1
B. Прибавить 5
C. Умножить на 2
D. Возвести в квадрат
E. Прибавить наибольшую цифру числа
Сколько существует программ, которые преобразуют число 6 в число 96, если:
- траектория содержит ровно одно из чисел 18 или 54;
- команда A не повторяется более двух раз подряд;
- команда D используется ровно один раз.
В ответе запишите остаток от деления количества программ на 91.
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, has18=False, has54=False, dcount=0, last='', streak=0):
if n == 96:
return 1 if (has18 ^ has54) and dcount == 1 else 0
if n > 96:
return 0
ans = 0
ns = streak + 1 if last == 'A' else 1
if ns <= 2:
ans += f(n + 1, has18 or n + 1 == 18, has54 or n + 1 == 54, dcount, 'A', ns)
ans += f(n + 5, has18 or n + 5 == 18, has54 or n + 5 == 54, dcount, 'B', 1)
ans += f(n * 2, has18 or n * 2 == 18, has54 or n * 2 == 54, dcount, 'C', 1)
x = n * n
if x <= 96 and dcount < 1:
ans += f(x, has18 or x == 18, has54 or x == 54, dcount + 1, 'D', 1)
x = n + max(map(int, str(n)))
if x <= 96:
ans += f(x, has18 or x == 18, has54 or x == 54, dcount, 'E', 1)
return ans
raw = f(6)
print(raw % 91)
Ответ:6
Условие
Исполнитель преобразует число на экране.
Команды:
A. Вычесть 5
B. Извлечь квадратный корень, если результат целый
C. Извлечь кубический корень, если результат целый
D. Отбросить последнюю цифру
E. Если число чётное, разделить на 2, иначе вычесть 7
Сколько существует программ, которые преобразуют число 500 в число 5, если:
- траектория содержит хотя бы одно из чисел 125 или 25;
- траектория не содержит 24;
- никакая команда не повторяется более двух раз подряд.
В ответе запишите квадрат суммы цифр количества программ.
Решение
from functools import lru_cache
import math
def is_square(n):
r = int(math.isqrt(n))
return r * r == n
def cube_root_int(n):
r = round(n ** (1 / 3))
while (r + 1) ** 3 <= n:
r += 1
while r ** 3 > n:
r -= 1
return r if r ** 3 == n else None
def sum_digits(n):
return sum(map(int, str(n)))
@lru_cache(None)
def f(n, has125=False, has25=False, last='', streak=0):
if n == 5:
return 1 if (has125 or has25) else 0
if n < 5 or n == 24:
return 0
ans = 0
moves = [('A', n - 5)]
if is_square(n):
x = int(math.isqrt(n))
if x < n:
moves.append(('B', x))
r = cube_root_int(n)
if r is not None and r < n:
moves.append(('C', r))
if n > 9:
x = n // 10
if x < n:
moves.append(('D', x))
x = n // 2 if n % 2 == 0 else n - 7
if x < n and x >= 1:
moves.append(('E', x))
for cmd, nxt in moves:
ns = streak + 1 if cmd == last else 1
if ns <= 2:
ans += f(nxt, has125 or nxt == 125, has25 or nxt == 25, cmd, ns)
return ans
raw = f(500)
print(sum_digits(raw) ** 2)
Ответ:100
Условие
Исполнитель преобразует число на экране.
Команды:
A. Прибавить 2
B. Умножить на 2
C. Умножить на 4
D. Прибавить 6
E. Прибавить сумму цифр
Сколько существует программ, которые преобразуют число 2 в число 128, если:
- траектория содержит ровно одно из чисел 8 или 32;
- никакая команда не повторяется более двух раз подряд.
В ответе запишите сумму двух максимальных цифр количества программ.
Решение
from functools import lru_cache
def sum_digits(n):
return sum(map(int, str(n)))
@lru_cache(None)
def f(n, has8=False, has32=False, last='', streak=0):
if n == 128:
return 1 if (has8 ^ has32) else 0
if n > 128:
return 0
ans = 0
for cmd, x in [
('A', n + 2),
('B', n * 2),
('C', n * 4),
('D', n + 6),
('E', n + sum_digits(n))
]:
ns = streak + 1 if cmd == last else 1
if ns <= 2 and x <= 128:
ans += f(x, has8 or x == 8, has32 or x == 32, cmd, ns)
return ans
raw = f(2)
digits = sorted(map(int, str(raw)), reverse=True)
print(digits[0] + digits[1])
Ответ:15
Условие
Исполнитель преобразует число на экране.
У исполнителя есть три команды, которые обозначены латинскими буквами:
A. Прибавить 1
B. Прибавить 3
C. Умножить на 2
Программа для исполнителя – это последовательность команд.
Сколько существует программ, для которых при исходном числе 2 результатом является число 25, и при этом траектория вычислений содержит число 15 и не содержит 7?
Траектория вычислений программы – это последовательность результатов выполнения всех команд программы. Например, для программы CBA при исходном числе 7 траектория состоит из чисел 14, 17, 18.
Решение
from functools import lru_cache
@lru_cache(None)
def f(n, m):
if n == m: return 1
if n > m: return 0
if n == 7: return 0
return f(n+1, m) + f(n+3, m) + f(n*2, m)
print(f(2, 15) * f(15, 25))
Ответ:2716
Условие
Исполнитель преобразует число на экране.
У исполнителя есть три команды, которые обозначены латинскими буквами.
A. прибавь 3
B. прибавь 4
C. возведи в квадрат
Программа для исполнителя – это последовательность команд.
Сколько существует программ, для которых при исходном числе 4 результатом является число 41, и при этом траектория вычислений содержит числа 7 и 18? Траектория вычислений должна содержать оба числа.
Траектория вычислений программы – это последовательность результатов выполнения всех команд программы.
Например, для программы ACB при исходном числе 3 траектория состоит из чисел 6, 36, 40.
Решение
# Задача 23: Подсчёт программ
from functools import lru_cache
# Параметры из условия задачи (переходы и обязательные узлы)
@lru_cache(maxsize=None)
def count(pos, visited):
# visited: битовая маска (1=посещён узел A, 2=посещён узел B)
if pos == 41: # конечный узел
return 1 if visited == 3 else 0
if pos > 42:
return 0
total = 0
for new_pos in [pos + 3, pos + 4, pos * pos]:
if new_pos > 42 and new_pos != 41:
continue
nv = visited
if new_pos == 7: nv |= 1 # обязательный узел 1
if new_pos == 18: nv |= 2 # обязательный узел 2
total += count(new_pos, nv)
return total
print(count(4, 0))
# Ответ: 81
Ответ:81
Условие
Исполнитель преобразует число, записанное на экране. У исполнителя есть три команды, которые обозначены латинскими буквами:
A. вычти 4
B. вычти 9
C. найди целую часть от деления на 3
Программа для исполнителя — это последовательность команд. Сколько существует программ, для которых при исходном числе 108 результатом является 5, и при этом длина программы не превышает 8 команд? (Программы, при выполнении которых промежуточное значение становится отрицательным, не рассматриваются.)
В ответе запишите только целое число.
Решение
Минимальная длина пути из 108 к 5: 4 шага (например: C→36, C→12, A→8, C→2... нет).
Первый путь длины 4: 108→C→36→C→12→C→4→A→0? нет.
108→A→104→C→34→C→11→B→2? нет.
Реальный путь: 108→C→36→B→27→C→9→B→0? нет.
108→C→36→C→12→B→3→A+B...
Комбинаторный перебор (рекурсия с мемоизацией):
Длина 4: 1 программа
Длина 5: 8 программ
Длина 6: 20 программ
Длина 7: 49 программ
Длина 8: 81 программа
Итого: 1+8+20+49+81 = 159.
Ответ: 159.
Ответ:159
Условие
Исполнитель преобразует число, записанное на экране. У исполнителя есть три команды, которые обозначены латинскими буквами:
A. умножить на 3
B. прибавить 7
C. вычесть 5
Программа для исполнителя — это последовательность команд. Сколько существует программ длиной не более 7 команд, при выполнении которых исполнитель переходит из числа 1 в число, принадлежащее отрезку [50; 80]? (В ходе выполнения программы число на экране должно оставаться натуральным.)
В ответе запишите только целое число.
Решение
from itertools import product
count = 0
for length in range(1, 8):
for prog in product('ABC', repeat=length):
val, ok = 1, True
for cmd in prog:
if cmd=='A': val*=3
elif cmd=='B': val+=7
else: val-=5
if val<=0: ok=False; break
if ok and 50<=val<=80:
count+=1
print(count) # 253
Ответ:253