Мне нужно реализовать последовательность https://oeis.org/A323119 на С++, но конкретных формул нет. Как это сделать ?
Раз точной формулы нет, то от Вас требуется рассчитать значения самостоятельно.
Приведу намеренно примитивный способ на Python - генерация всех возможных композиций числа на слагаемые в диапазоне k..k+2 с проверкой, что в композиции действительно есть конечные значения диапазона
def comp2_int(n, mn, mx, hasmn, hasmx):
if n == 0 and hasmn and hasmx:
return 1
if n < 0:
return 0
res = 0
for i in range(mn, mx + 1):
res += comp2_int(n - i, mn, mx, (i == mn) or hasmn, (i == mx) or hasmx)
return res
def comp2(n):
res = 0
for k in range(1, n-1):
res += comp2_int(n, k, k+2, False, False)
return res
for m in range(15):
print(m, comp2(m))
3 0
4 2
5 3
6 12
7 20
8 49
9 95
10 188
11 366
12 714
13 1347
14 2565
Более эффективно может быть использовать генерацию наборов с невозрастающими слагаемыми (например, 5=3+1+1), затем умножать на количество перестановок с повторениями (в данном случае 3=3!(2!1!)), но ещё лучше - какой-либо вид динамического программирования, когда мы повторно используем вычисленные для некоторого набора (n, min, max) (причём max-min может быть не только 2, но и 0 и 1) результаты позже.
Ну это уже для Вас упражнение.
Продвижение своими сайтами как стратегия роста и независимости