Алгоритм вычисления значения функции F(n), где n — целое число, задан следующими соотношениями:
если
если
Определите количество
Приведем решение Максима Балакирева (Белгород) на языке python.
from functools import *
# граничное значение в 15-ричной сс
n = 3 ** 40
a = []
while n > 0:
a = [n % 15] + a
n //= 15
@cache
def f(p, l, fl, zero):
# если произведение больше нужного, последовательность никогда не подойдёт.
if p > 7560: return 0
# если последовательность нужной длины, проверяем, что произведение нам подходит,
# и выходим из рекурсии.
if l == 0: return p == 7560
# проверяем ограниченные подпоследовательности большей длины
# zero=1 означает, что до этого мы ставили только нули (тогда если ставим новый 0, то произведение менять не нужно)
return sum(f(p * (max(x, 1) if zero else x), l - 1, fl and (x == a[-l]), zero and (x == 0)) for x in range([15, a[-l] + 1][fl]))
# ответ - количество ограниченных последовательностей необходимой длины
print(f(1, len(a), 1, 1))
Ответ: 311880322.

