№16

Новый прототип 2026

Новый прототип 2026

№ 28761 Досрочная волна 2026 (Уровень: Средний)

Алгоритм вычисления значения функции $F(n)$, где $n$ – целое число, задан следующими соотношениями:
$F(n)=3$ при $n<10$;
$F(n)=(n+4)×F(n−5)$, если $n≥10$.
Чему равно значение выражения $(F(257487) / 683 + 67 \times F(257477)) / F(257472)$?
В ответе запишите целую часть полученного числа

 

Здесь необходимо использовать модифицированный код:

Необходимо использовать <em>lru_cache</em> c параметром.

lru_cache — это декоратор  в Python, который запоминает результаты функции.
Если вызвать функцию с теми же аргументами — она не считается заново, а берётся из кэша.

📌 Как работает
Хранит ограниченное число результатов и удаляет самые «старые» (которые давно не использовались).

📌 Параметры
maxsize — сколько значений хранить (по умолчанию = 128)
maxsize=None — без ограничений

🤔 А чем тогда функция lru_cache отличается от cache?

<strong>cache</strong> — это отдельно объявленный декоратор, но реализован он как обёртка над lru_cache и внутри она вызывает lru_cache(maxsize=None)

Решение:

from functools import lru_cache
@lru_cache(16)
# в вычисляемом выражении максимальная разница аргументов: 257_487 - 257_472 = 15
# поэтому храним только 257_487- 257_472 + 1 = 16 последних значений.
# можно взять просто 100, по затрачиваемым ресурсам разница невелика
def f(n):
    if n < 10:
        return 3
    return (n + 4) * f(n - 5)
for i in range(1, 257488): # закэшируем только максимально необходимый диапазон
    f(i)
print((f(257487) // 683 + f(257477) // 67) // f(257472))
# 24994252796625

← К списку шпаргалок