Алгоритм вычисления значения функции F(n), где n — целое число, задан следующими соотношениями:
если
если
Определите количество
from functools import *
def f(n, b):
# граничное значение в b-ичной сс
a = []
while n > 0:
a = [n % b] + a
n //= b
@cache
def g(s, l, fl):
# если последовательность нужной длины, проверяем, что сумма нам подходит,
# и выходим из рекурсии.
if l == 0: return s == 121
# проверяем ограниченные подпоследовательности большей длины
return sum(g(s+x, l-1, fl and (x == a[-l])) for x in range([b, a[-l]+1][fl]))
return g(0, len(a), 1)
# ответ - разность между количеством подходящих чисел на отрезке [1; 5*6^20] и полуинтервале [1; 4*6^20).
print(f(5*6**20, 9) - f(4*6**20-1, 9))
Ответ: 194257368.

