Репозиторий, в котором я разбираюсь в комбинаторике, числовых последовательностях
и конечных разностях. Каждая программа в Research_Code/ — отдельное
исследование: формулировка наблюдения в комментариях, потом код, который это
наблюдение проверяет.
Ценность не в «красивых числах» как таковых, а в том, что почти все они сводятся к конечным разностям и числам второй порядка.
0 1 4 9 16 25 36 49 64 81 ← квадраты
1 3 5 7 9 11 13 15 17 ← разности
2 2 2 2 2 2 2 2 ← разности разностей
Второй порядок разностей квадратов постоянен. Отсюда растёт всё остальное
исследование: если d¹ квадратов — линейная последовательность, то
«пирамиды из кубиков» (степени) должны давать постоянные разности третьего
порядка.
0 1 32 243 1024 3125 ← r² для r = 0..5
1 31 211 781 2101 ← разности
30 180 570 1320 ← разности второго порядка
150 390 750 ← третьего
240 360 ← четвёртого
120 ← = 1·2·3·4·5 = 5!
120 = 5! — последняя строка треугольной пирамиды оказывается факториалом.
Значения a_r = r! и есть «альфа-числа» в терминологии проекта. Рост
разностей по краям пирамиды подтверждает гипотезу.
Тот же объект, но для больших r. Считается, что
a_0 = 0
a_1 = 1
a_i = a_(i-1) · 2 если r чётное и i чётное
Наблюдения из комментариев: r = 4 → пирамида 0 1 2 12 24,
r = 5 → 0 1 0 30 0 120. Часть значений обнуляется — это «сухожилия» пирамиды.
Ключевое исследование. b_ik — длина ребра «клетки» в треугольной пирамиде из
комбинаторных треугольников.
b_0 = 0, b_1 = 1
b_2 = 2^r - 2
b_3 = 3^r - 4·b_2 - 3Проверки из кода:
r = 3; n = 2 → b_2 = 6
r = 5; n = 2 → b_2 = 30
r = 7; n = 2 → b_2 = 126
r = 9; n = 2 → b_2 = 510
r = 5; n = 3 → b_3 = 120
r = 7; n = 3 → b_3 = 1680
r = 9; n = 3 → b_3 = 17640
3^7 = 2187 − 4·126 − 3 = 1680 — формула сходится.
Комбинаторная сумма ?_n по n-му треугольнику Паскаля (r — степень,
n — строка). Промежуточные ряды:
?_0 = 1 1 1 1 1
?_1 = 0 2 4 6 8 (разности 2 2 2 2)
?_2 = 0 5 14 27 44 (разности 5 9 13 17)
Значения вычисляются треугольником Паскаля с расчётом r^n на каждом шаге.
Компактная реализация: матрица N×N на vector<vector<int>> с
псевдонимом using Matrix = vector<vector<int>>, обход по треугольнику.
Поиск делителей и их разложение. Числа делятся на два класса:
- «красивые» — 1, 2, 3, 4, 5, 6, 8, 9, 10, …
- «вырожденные» — те, у которых 0 и 1 стоят рядом, а сам состав делителей вырождается.
Зависит от <windows.h> — для вывода в консоль. Под Linux/Wine не соберётся
без правки.
Сводит get_betas (из fourth.cpp) и get_dividers (из fifth.cpp) вместе и
печатает обе таблицы. В комментариях зафиксировано, что W(n,k) — числа второй
порядка, OEIS A028246.
Итоговая формула бета-чисел:
b_n(r) = Σ_{k=1..n} (-1)^(n-k) · W(n,k) · k^r
Проверка на больших числах: b_3(27) = 7625060614080.
Программы независимы, собираются по одной:
cd Research_Code
g++ -std=c++17 -O2 -o first first.cpp
./firstseventh.cpp и eighth.cpp используют <windows.h> (консольный вывод),
остальные — стандартную библиотеку.
Index.cpp и bu.py в корне — ранние черновики, не часть нумерованных
исследований.
Исследование идёт по частям, gamma (часть 5) — в работе. В репозитории
лежат собранные .exe — они не должны быть под контролем версий, см.
.gitignore.
Код намеренно оставлен в стиле «как есть»: это черновики наблюдений, а не библиотека. Строгих типов, тестов и документации нет.
MIT.