В комбинаторике сочетанием из
![$n$](https://habrastorage.org/getpro/habr/formulas/08d/9fa/efb/08d9faefbe272bdf8fbb80773542e343.svg)
по
![$k$](https://habrastorage.org/getpro/habr/formulas/16d/a50/7b2/16da507b2fc389688ef0659939dcc647.svg)
называют набор
![$k$](https://habrastorage.org/getpro/habr/formulas/16d/a50/7b2/16da507b2fc389688ef0659939dcc647.svg)
элементов, выбранных из
![$n$](https://habrastorage.org/getpro/habr/formulas/08d/9fa/efb/08d9faefbe272bdf8fbb80773542e343.svg)
элементов. В отличие от размещений, число сочетаний не учитывает последовательность размещения элементов, например: «Сколько групп из 4 человек, можно получить, если всего в классе 20 человек?». Хотя удобные способы подсчёта давно известны, на ещё два стоит взглянуть.
Обозначается сочетание из
![$n$](https://habrastorage.org/getpro/habr/formulas/08d/9fa/efb/08d9faefbe272bdf8fbb80773542e343.svg)
по
![$k$](https://habrastorage.org/getpro/habr/formulas/16d/a50/7b2/16da507b2fc389688ef0659939dcc647.svg)
так:
![$C_n^k$](https://habrastorage.org/getpro/habr/formulas/bbc/289/5e5/bbc2895e5f173cca6296118530c50b4b.svg)
. В литературе они чаще обозначаются
![$ \binom nk$](https://habrastorage.org/getpro/habr/formulas/235/a40/5ec/235a405ec1be087349a0d0367f95ec6e.svg)
(но мне больше нравится первый вариант, чтобы не путать с матрицами).
В комбинаторике известны несколько способов подсчёта:
![$C_n^k = \frac{n!}{k!(n-k)!}$](https://habrastorage.org/getpro/habr/formulas/dd7/f0f/ab7/dd7f0fab70cd512370d821d2904e1d60.svg)
![$C_n^k=\frac{n(n-1)(n-2)…(n-k+1)}{k!}=\frac{\prod\limits_{i = n-k+1}^n i}{k!}$](https://habrastorage.org/getpro/habr/formulas/c16/f3e/bef/c16f3ebef53c4bfb704b433f53386bb4.svg)
Где
![$n!$](https://habrastorage.org/getpro/habr/formulas/514/81f/3b8/51481f3b804e488c308961363a39722f.svg)
— эн факториал, произведение всех целых чисел от 1 до n (например:
![$4!=1\cdot2\cdot3\cdot4=24$](https://habrastorage.org/getpro/habr/formulas/8a4/80c/9cf/8a480c9cf87c38a5cb52f5c6c436b15c.svg)
), а
![$0!$](https://habrastorage.org/getpro/habr/formulas/aec/7a5/712/aec7a5712b734996659d0d6f18ecf56f.svg)
считается равным единице. Для вышесказанной задачи получается:
![$C_{20}^4 = \frac{20!}{4!(20-4)!} = \frac{17\cdot18\cdot19\cdot20}{1\cdot2\cdot3\cdot4} = 4845$](https://habrastorage.org/getpro/habr/formulas/232/b1c/e63/232b1ce63c5cffa7b025c2dd0526cfdd.svg)
Или так:
![$C_{20}^4=\frac{20\cdot19\cdot18\cdot17}{4!}=\frac{116280}{24}=4845$](https://habrastorage.org/getpro/habr/formulas/b07/139/7c2/b071397c22e7989afed8d45ceac9a1ff.svg)
Вторая формула сочетаний выводится очень просто. Есть понятие числа размещений из
![$n$](https://habrastorage.org/getpro/habr/formulas/08d/9fa/efb/08d9faefbe272bdf8fbb80773542e343.svg)
по
![$k$](https://habrastorage.org/getpro/habr/formulas/16d/a50/7b2/16da507b2fc389688ef0659939dcc647.svg)
, когда последовательность элементов имеет значение (то есть набор «первый со вторым с пятым» это не тоже самое, что «первый с пятым со вторым»), обозначается
![$A_n^k$](https://habrastorage.org/getpro/habr/formulas/88c/208/d5a/88c208d5a343a0a7ab5bc4fe1b85f987.svg)
.
Например все размещения из 3 по 2 выглядят так:
12 21
13 31
23 32
Первый элемент можно выбрать
![$n$](https://habrastorage.org/getpro/habr/formulas/08d/9fa/efb/08d9faefbe272bdf8fbb80773542e343.svg)
способами, второй —
![$(n-1)$](https://habrastorage.org/getpro/habr/formulas/0dd/b4e/fb1/0ddb4efb174d43d8d09309243f89f714.svg)
способами, последний —
![$(n-(k-1))$](https://habrastorage.org/getpro/habr/formulas/2c1/a2a/d5e/2c1a2ad5e072602dc0673a37b2383fed.svg)
способами. Поэтому число размещений из
![$n$](https://habrastorage.org/getpro/habr/formulas/08d/9fa/efb/08d9faefbe272bdf8fbb80773542e343.svg)
по
![$k$](https://habrastorage.org/getpro/habr/formulas/16d/a50/7b2/16da507b2fc389688ef0659939dcc647.svg)
равно
![$n(n-1)(n-2)…(n-k+1)$](https://habrastorage.org/getpro/habr/formulas/41e/7d9/01c/41e7d901c62a90dc769f177df17c2e1c.svg)
, всего
![$k$](https://habrastorage.org/getpro/habr/formulas/16d/a50/7b2/16da507b2fc389688ef0659939dcc647.svg)
множителей.
Для подсчёта сочетаний получившиеся число нужно разделить на
![$k!$](https://habrastorage.org/getpro/habr/formulas/a89/b36/32d/a89b3632d7d54985cd8bdb44411c922c.svg)
, поскольку есть
![$k!$](https://habrastorage.org/getpro/habr/formulas/a89/b36/32d/a89b3632d7d54985cd8bdb44411c922c.svg)
способов разместить
![$k$](https://habrastorage.org/getpro/habr/formulas/16d/a50/7b2/16da507b2fc389688ef0659939dcc647.svg)
элементов. В данном случае —
![$2!=2$](https://habrastorage.org/getpro/habr/formulas/1b7/f09/7af/1b7f097af62c1216fe9eddef2e723253.svg)
способа (первый со вторым и второй с первым — это одно и тоже сочетание).
Вспомним, как идет счёт в шашках по круговой системе (когда все играют со всеми). Для этого пишут обычную таблицу:
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/149/d3c/e91/149d3ce912a5e9b747d2459dc6550402.png)
По горизонтали и вертикали идут номера игроков. Диагональ можно закрасить — игрок не может играть сам с собой. Результат каждой партии записывают в таблицу два раза. Как сыграл второй с пятым и как сыграл пятый со вторым. Таким образом, количество партий в турнире — и есть число сочетаний по 2.
Число вычеркнутых клеток равно
![$n$](https://habrastorage.org/getpro/habr/formulas/08d/9fa/efb/08d9faefbe272bdf8fbb80773542e343.svg)
, а число всех клеток — это
![$n^2$](https://habrastorage.org/getpro/habr/formulas/f1c/e37/e87/f1ce37e8733fc14b0a6be043fdb111c2.svg)
. Стало быть, число сочетаний по 2 можно посчитать так:
![$C_n^2=\frac{n^2-n}{2}$](https://habrastorage.org/getpro/habr/formulas/028/389/2e9/0283892e9632407c4478c32ea2635617.svg)
Когда я это заметил, не сразу увидел что это равно
![$\frac{n(n-1)}{2!}$](https://habrastorage.org/getpro/habr/formulas/e22/586/095/e22586095b2b61066aafd88a7c8c2bcb.svg)
. Решил сделать также для
![$k=3$](https://habrastorage.org/getpro/habr/formulas/c70/8e5/434/c708e5434f493356304a46d3301ef8b0.svg)
, с трёхмерной таблицей:
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/b59/ab5/fa9/b59ab5fa9e69bdb32510201af09e7b10.png)
На каждом её слое, кроме диагонали исключаются еще клетки. Например, клетка 161 исключается, потому что единица повторилась два раза.
Всего на каждом слое исключается
![$n+2(n-1)$](https://habrastorage.org/getpro/habr/formulas/11f/e93/9df/11fe939df39666ef2c9f1d645bde33fe.svg)
клеток.
![$n+2(n-1)=3n-2$](https://habrastorage.org/getpro/habr/formulas/f81/ce8/85d/f81ce885d8ffbf6436a0d4f7c9a3b06f.svg)
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/e84/b02/f9f/e84b02f9fcf77677f1ff7f6c60d9c5cf.png)
Итак, на каждом слое исключается
![$3n-2$](https://habrastorage.org/getpro/habr/formulas/f04/74e/0dd/f0474e0dd76c55dc273db08befeb36c0.svg)
клетки. Всего
![$n$](https://habrastorage.org/getpro/habr/formulas/08d/9fa/efb/08d9faefbe272bdf8fbb80773542e343.svg)
слоёв, поэтому общее число исключившихся ячеек:
![$n(3n-2)=3n^2-2n$](https://habrastorage.org/getpro/habr/formulas/83b/12e/9f4/83b12e9f4ed50936c7bc9164e0afecd6.svg)
А вся таблица —
![$n^3$](https://habrastorage.org/getpro/habr/formulas/c02/19c/448/c0219c4481723053a7da0c175d5350b9.svg)
. Значит, число сочетаний по 3 можно посчитать так:
![$C_n^3=\frac{n^3-(3n^2-2n)}{3!}=\frac{n^3-3n^2+2n}{3!}$](https://habrastorage.org/getpro/habr/formulas/e3f/cca/987/e3fcca9874784dca3b7308ccc8a9b02c.svg)
Как уже сказано выше, это и есть общая формула, в которой просто раскрыли скобки:
![$C_n^3=\frac{n^3-3n^2+2n}{3!}=\frac{n(n-1)(n-2)}{3!}$](https://habrastorage.org/getpro/habr/formulas/e92/71f/ac2/e9271fac2d3275489344f04a0eb61900.svg)
И тут возник вопрос, можно ли посчитать сочетания, так же представив их через таблицы, не используя факториалы вообще? К слову, в комбинаторике уже известна рекуррентная формула для числа сочетаний:
![$C_n^k=C_{n-1}^{k-1}+C_{n-1}^k$](https://habrastorage.org/getpro/habr/formulas/bb6/d6e/e05/bb6d6ee0511048adc6c481cba04f252b.svg)
(число сочетаний по 0 равно 1, из любого количества элементов можно получить только одну группу в которой 0 элементов). Итак, я попробовал посмотреть, какие еще клетки исключаются в трёхмерной таблице, когда мы делим число оставшихся клеток на
![$k!$](https://habrastorage.org/getpro/habr/formulas/a89/b36/32d/a89b3632d7d54985cd8bdb44411c922c.svg)
.
![](https://habrastorage.org/r/w1560/webt/oi/s5/iq/ois5iqnul9dzfwxuv9mqs977hwe.png)
Клетки ниже диагонали дублируют клетки, которые выше диагонали — вычеркнем их (ячейка 431 — то же самое, что и 341). Для того, чтобы получить такое же количество клеток, просто поделим число размещений на 2. Цифрами в самой таблице я отметил, в какой строке встретилось данное сочетание. Например, сочетание 251 впервые встретилось здесь во второй строке, поэтому отмечено цифрой 2. Посмотрим на следующий слой:
![](https://habrastorage.org/r/w1560/webt/sm/zh/ya/smzhyaczflldm0cdn3xewsvqbrk.png)
Закрашенные клетки с цифрой означают, что данное сочетание уже встречалось. Например, комбинация 152 уже встречалась во второй строке (в виде 251), поэтому отмечена цифрой 2 в закрашенной клетке.
Итак, на втором слое исключается ещё
![$(n-2)$](https://habrastorage.org/getpro/habr/formulas/441/f17/8a4/441f178a433d1b7739220f523e5dd24a.svg)
клетки (кроме тех, которые вычеркнуты из-за повторяющихся чисел в них, и тех, которые вычеркнуты ниже диагонали, из-за того что дублируют верхние). Перебрав так всю таблицу, я получил следующее. На третьем слое исключается ещё
![$(n-2)+(n-3)$](https://habrastorage.org/getpro/habr/formulas/d81/a54/e73/d81a54e73a1a3dd135330ead05759e7e.svg)
клеток:
![](https://habrastorage.org/r/w1560/webt/nt/qq/em/ntqqemzmrbyh3s8ybvfhloog2uy.png)
На четвертом слое вычеркивается ещё
![$(n-2)+(n-3)+(n-4)$](https://habrastorage.org/getpro/habr/formulas/f3f/856/4db/f3f8564db81951ee98eeb77150100942.svg)
клеток:
![](https://habrastorage.org/r/w1560/webt/zu/po/_o/zupo_ouk27b23x3mbzehhlwyllm.png)
На пятом —
![$(n-2)+(n-3)+(n-4)+(n-5)$](https://habrastorage.org/getpro/habr/formulas/2c6/0a3/e0a/2c60a3e0a727f3a12d5f88ee37d15fc3.svg)
:
![](https://habrastorage.org/r/w1560/webt/ma/my/9p/mamy9phgboeyklckv4fxq8kjhc4.png)
На шестом, по видимому,
![$(n-2)+(n-3)+(n-4)+(n-5)+(n-n)$](https://habrastorage.org/getpro/habr/formulas/766/c6c/bd8/766c6cbd8cfecd5f5b0b36c17b22b6af.svg)
:
![](https://habrastorage.org/r/w1560/webt/yd/ww/wp/ydwwwpwmvf7dxkxbkgezxcmtu4o.png)
Получается, что для подсчёта сочетаний по 3, из числа
![$\frac{n(n-1)(n-2)}{2}$](https://habrastorage.org/getpro/habr/formulas/14d/9e7/5b7/14d9e75b7e691e7254f8ce664c144e57.svg)
нужно вычесть такую сумму:
![$(n-2)+((n-2)+(n-3))+((n-2)+(n-3)+(n-4))+\\((n-2)+(n-3)+(n-4)+(n-5))+((n-2)+(n-3)+(n-4)+(n-5)+(n-n))$](https://habrastorage.org/getpro/habr/formulas/bba/03e/787/bba03e787cb6fc35dac6307d29d2f339.svg)
Это можно переписать в таком виде:
![$\sum_{i=2}^n{\sum_{j=2}^i(n-j)}$](https://habrastorage.org/getpro/habr/formulas/4b9/824/161/4b98241618b3faa8540981acb6945de6.svg)
Ещё можно переписать эту сумму так:
![$5(n-2)+4(n-3)+3(n-4)+2(n-5)+(n-n)=\\(n-1)(n-2)+(n-2)(n-3)+(n-3)(n-4)+(n-4)(n-5)+(n-5)(n-n)$](https://habrastorage.org/getpro/habr/formulas/411/d50/cd8/411d50cd841a82e5db978bf220a08800.svg)
То есть:
![$\sum_{i=2}^{n-1}{(n-i)(n-i+1)}$](https://habrastorage.org/getpro/habr/formulas/cac/aab/6d2/cacaab6d227518f9877a8694e6f8f09c.svg)
Значит, число сочетаний по 3 можно вычислить так:
![$C_n^3=\frac{n(n-1)(n-2)}{2}-\sum_{i=2}^n\sum_{j=2}^i(n-j)=\frac{n(n-1)(n-2)}{2}-\sum_{i=2}^{n-1}{(n-i)(n-i+1)}$](https://habrastorage.org/getpro/habr/formulas/e03/2d0/684/e032d06840d8d73700c49a16dd47a178.svg)
Например число сочетаний из 8 по 3:
![$C_8^3=\frac{8\cdot7\cdot6}{2}-\sum_{i=2}^7{(n-i)(n-i+1)}=\\ 168-(6\cdot7+5\cdot6+4\cdot5+3\cdot4+2\cdot3+1\cdot2)=\\ 168-112=56$](https://habrastorage.org/getpro/habr/formulas/2a7/b10/304/2a7b10304897d77f91b28cd95cbe1475.svg)
На этом этапе вряд ли видна какая-либо зависимость, посмотрим то же самое с четырёхмерной таблицей. Изобразить её можно в виде нескольких трёхмерных (у трёхмерной таблицы слои двухмерные, у четырёхмерной — трёхмерные). То есть, первый фрагмент четырёхмерной таблицы будет выглядеть так (первая ячейка будет иметь координаты 1111):
![](https://habrastorage.org/r/w1560/webt/k8/zm/ep/k8zmep5ng-m2ijrdc3euacysuri.png)
Весь первый двухмерный слой этого слоя исключается (на нем единица везде повторяется). В итоге на первом трёхмерном слое вычитается такая сумма:
![$\begin{pmatrix}-\\0+\\(n-3)+\\(n-3)+(n-4)+\\(n-3)+(n-4)+(n-5)+\\(n-3)+(n-4)+(n-5)+(n-n)\end{pmatrix}$](https://habrastorage.org/getpro/habr/formulas/d05/12f/46d/d0512f46d42b98cffe7c1b4fd4fd7341.svg)
Слагаемые в столбик записаны лишь для наглядности. Прочерком я отметил первый двухмерный слой, который итак исключился весь. Посмотрим следующий «слой» четырёхмерной таблицы:
![](https://habrastorage.org/r/w1560/webt/xw/hz/ni/xwhznitgv0twgkmsrvurq1plfxa.png)
Значит, на втором слое исключается такая сумма:
![$\begin{pmatrix}(n-3)+(n-4)+(n-5)+\\-\\(n-3)+\\(n-3)+(n-4)+\\(n-3)+(n-4)+(n-5)+\\(n-3)+(n-4)+(n-5)\end{pmatrix}=\begin{pmatrix}-\\(n-3)+\\(n-3)+(n-4)+\\(n-3)+(n-4)+(n-5)+\\(n-3)+(n-4)+(n-5)+\\(n-3)+(n-4)+(n-5)\end{pmatrix}$](https://habrastorage.org/getpro/habr/formulas/7d1/acc/386/7d1acc386a8c3021d0ec3687d20d761c.svg)
Посмотрим на третий:
![](https://habrastorage.org/r/w1560/webt/rz/1l/cj/rz1lcjsfpscz1nn3kuyc0zbi23c.png)
На третьем исключается сумма:
![$\begin{pmatrix}(n-3)+(n-4)+(n-5)+\\(n-3)+(n-4)+(n-5)+\\-\\(n-3)+(n-4)+\\(n-3)+(n-4)+(n-5)+\\(n-3)+(n-4)+(n-5)\end{pmatrix}=\begin{pmatrix}-\\(n-3)+(n-4)+\\(n-3)+(n-4)+(n-5)+\\(n-3)+(n-4)+(n-5)+\\(n-3)+(n-4)+(n-5)+\\(n-3)+(n-4)+(n-5)\end{pmatrix}$](https://habrastorage.org/getpro/habr/formulas/5c7/dce/a0f/5c7dcea0f10d65a3372bb7e8108d3b1d.svg)
Уже здесь видно, что общая сумма, которая будет вычитаться будет такой:
![$\begin{pmatrix}-\\0+\\(n-3)+\\(n-3)+(n-4)+\\(n-3)+(n-4)+(n-5)+\\(n-3)+(n-4)+(n-5)\end{pmatrix}+\begin{pmatrix}-\\(n-3)+\\(n-3)+(n-4)+\\(n-3)+(n-4)+(n-5)+\\(n-3)+(n-4)+(n-5)+\\(n-3)+(n-4)+(n-5)\end{pmatrix}+\\\begin{pmatrix}-\\(n-3)+(n-4)+\\(n-3)+(n-4)+(n-5)+\\(n-3)+(n-4)+(n-5)+\\(n-3)+(n-4)+(n-5)+\\(n-3)+(n-4)+(n-5)\end{pmatrix}+\begin{pmatrix}-\\(n-3)+(n-4)+(n-5)+\\(n-3)+(n-4)+(n-5)+\\(n-3)+(n-4)+(n-5)+\\(n-3)+(n-4)+(n-5)+\\(n-3)+(n-4)+(n-5)\end{pmatrix}+\\\begin{pmatrix}-\\(n-3)+(n-4)+(n-5)+\\(n-3)+(n-4)+(n-5)+\\(n-3)+(n-4)+(n-5)+\\(n-3)+(n-4)+(n-5)+\\(n-3)+(n-4)+(n-5)\end{pmatrix}+\begin{pmatrix}-\\(n-3)+(n-4)+(n-5)+\\(n-3)+(n-4)+(n-5)+\\(n-3)+(n-4)+(n-5)+\\(n-3)+(n-4)+(n-5)+\\(n-3)+(n-4)+(n-5)\end{pmatrix}$](https://habrastorage.org/getpro/habr/formulas/266/681/859/26668185979b69acd461f6411d1d5350.svg)
её можно переписать в таком виде:
4(n-3)+3(n-4)+2(n-5)+1(n-n)+
5(n-3)+4(n-4)+3(n-5)+2(n-n)+
5(n-3)+5(n-4)+4(n-5)+3(n-n)+
5(n-3)+5(n-4)+5(n-5)+4(n-n)+
5(n-3)+5(n-4)+5(n-5)+5(n-n)+
5(n-3)+5(n-4)+5(n-5)+5(n-n)
Получаем:
![$29(n-3)+27(n-4)+24(n-5)+20(n-n)$](https://habrastorage.org/getpro/habr/formulas/7f1/191/6db/7f11916db65fb65197beaa8e0d4b7f8f.svg)
Видно, что коэффициенты перед скобками уменьшаются на число, которое возрастает на единицу. Поэтому можем записать:
![$C_n^4=\frac{n(n-1)(n-2)(n-3)}{2}-\sum_{i=3}^{n-1}{(n-i)\left(30-\sum_{j=1}^{i-2}j\right)}$](https://habrastorage.org/getpro/habr/formulas/726/e0c/3ae/726e0c3ae76e4a73a49b0b7f55f261d6.svg)
Однако, получившаяся формула будет работать только для
![$n=6$](https://habrastorage.org/getpro/habr/formulas/0fa/516/e02/0fa516e02a79dbc7e3393a8a18bccd3e.svg)
, ведь для других
![$n$](https://habrastorage.org/getpro/habr/formulas/08d/9fa/efb/08d9faefbe272bdf8fbb80773542e343.svg)
коэффициенты будут другие. И, поскольку я не увидел зависимости от
![$k$](https://habrastorage.org/getpro/habr/formulas/16d/a50/7b2/16da507b2fc389688ef0659939dcc647.svg)
и здесь, решил посмотреть тоже самое для
![$k=5$](https://habrastorage.org/getpro/habr/formulas/ae0/31e/7c0/ae031e7c0fc2ae504419c098408f88d0.svg)
, через пятимерную таблицу, весь её первый трёхмерный «слой» исключается, поскольку единица здесь повторяется во всех ячейках:
![](https://habrastorage.org/r/w1560/webt/xf/9a/gy/xf9agy7dsnrfkjktavsbaqk5tgi.png)
Для наглядности запишем это так:
![$\begin{pmatrix}-\\-\\-\\-\\-\\-\end{pmatrix}$](https://habrastorage.org/getpro/habr/formulas/fbf/877/287/fbf87728751127ff1bff0f2e6fb70482.svg)
Смотрим дальше:
![](https://habrastorage.org/r/w1560/webt/ck/u2/qe/cku2qek0161vo9tiwzvwmpz1w5y.png)
Тут, как видно, вычитается такая сумма:
![$\begin{pmatrix}-\\-\\0\\(n-4)+\\(n-4)+(n-5)+\\(n-4)+(n-5)\end{pmatrix}$](https://habrastorage.org/getpro/habr/formulas/206/963/dd7/206963dd71fbb4c55cf4d8c261a9e8ef.svg)
Третий:
![](https://habrastorage.org/r/w1560/webt/ki/ei/qe/kieiqetjbnk8kxa-0_txhwjpli0.png)
Тут вычитается:
![$\begin{pmatrix}-\\(n-4)+(n-5)+\\-\\(n-4)+\\(n-4)+(n-5)+\\(n-4)+(n-5)\end{pmatrix}=\begin{pmatrix}-\\-\\(n-4)+\\(n-4)+(n-5)+\\(n-4)+(n-5)+\\(n-4)+(n-5)\end{pmatrix}$](https://habrastorage.org/getpro/habr/formulas/3fc/0bb/65d/3fc0bb65db43b0d9857298456545269b.svg)
![$\begin{pmatrix}-\\(n-4)+(n-5)+\\(n-4)+(n-5)+\\-\\(n-4)+(n-5)+\\(n-4)+(n-5)\end{pmatrix}=\begin{pmatrix}-\\-\\(n-4)+(n-5)+\\(n-4)+(n-5)+\\(n-4)+(n-5)+\\(n-4)+(n-5)\end{pmatrix}$](https://habrastorage.org/getpro/habr/formulas/7bc/478/630/7bc478630d0da79ac957b1d6b77074af.svg)
![$\begin{pmatrix}-\\(n-4)+(n-5)+\\(n-4)+(n-5)+\\(n-4)+(n-5)+\\-\\(n-4)+(n-5)\end{pmatrix}=\begin{pmatrix}-\\-\\(n-4)+(n-5)+\\(n-4)+(n-5)+\\(n-4)+(n-5)+\\(n-4)+(n-5)\end{pmatrix}$](https://habrastorage.org/getpro/habr/formulas/299/0ba/27e/2990ba27ed16e82cf519fcf872298a14.svg)
Затем, шестой фрагмент:
![$\begin{pmatrix}-\\(n-4)+(n-5)+\\(n-4)+(n-5)+\\(n-4)+(n-5)+\\(n-4)+(n-5)\\-\end{pmatrix}=\begin{pmatrix}-\\-\\(n-4)+(n-5)+\\(n-4)+(n-5)+\\(n-4)+(n-5)+\\(n-4)+(n-5)\end{pmatrix}$](https://habrastorage.org/getpro/habr/formulas/742/4fb/3d8/7424fb3d8e25a760555454cc604b965d.svg)
На этом первый четырёхмерный слой заканчивается. Не сложно понять, что трёхмерный «слой» 21 будет дублировать слой 12, а слой 22 исключится весь, также как 11.
Перейдем к «слою» 23:
![](https://habrastorage.org/r/w1560/webt/os/zv/p0/oszvp0gxum4j5vq4v_ninstxkik.png)
Здесь встретилось последнее сочетание из 6 по 5 — 56423 (клетки, которые встретились впервые отмечены белым, если кто забыл)). Напишем, какую в итоге надо вычесть сумму из
![$\frac{n(n-1)(n-2)(n-3)(n-4)}{2}$](https://habrastorage.org/getpro/habr/formulas/8e2/6b0/c0e/8e26b0c0e4f088456d722c4b0d36140b.svg)
, чтобы получить число сочетаний из
![$n$](https://habrastorage.org/getpro/habr/formulas/08d/9fa/efb/08d9faefbe272bdf8fbb80773542e343.svg)
по 5. На первом четырёхмерном слое исключилось:
![$\begin{pmatrix}-\\-\\-\\-\\-\\-\end{pmatrix}+\begin{pmatrix}-\\-\\0+\\(n-4)+\\(n-4)+(n-5)+\\(n-4)+(n-5)\end{pmatrix}+\begin{pmatrix}-\\-\\(n-4)+\\(n-4)+(n-5)+\\(n-4)+(n-5)+\\(n-4)+(n-5)\end{pmatrix}+\begin{pmatrix}-\\-\\(n-4)+(n-5)+\\(n-4)+(n-5)+\\(n-4)+(n-5)+\\(n-4)+(n-5)\end{pmatrix}+\\\begin{pmatrix}-\\-\\(n-4)+(n-5)+\\(n-4)+(n-5)+\\(n-4)+(n-5)+\\(n-4)+(n-5)\end{pmatrix}+\begin{pmatrix}-\\-\\(n-4)+(n-5)+\\(n-4)+(n-5)+\\(n-4)+(n-5)+\\(n-4)+(n-5)\end{pmatrix}$](https://habrastorage.org/getpro/habr/formulas/277/225/f68/277225f682cc55ebc2fd72b399437735.svg)
На втором:
![$\begin{pmatrix}-\\-\\-\\-\\-\\-\end{pmatrix}+\begin{pmatrix}-\\-\\(n-4)+\\(n-4)+(n-5)+\\(n-4)+(n-5)+\\(n-4)+(n-5)\end{pmatrix}+\begin{pmatrix}-\\-\\(n-4)+(n-5)+\\(n-4)+(n-5)+\\(n-4)+(n-5)+\\(n-4)+(n-5)\end{pmatrix}+\begin{pmatrix}-\\-\\(n-4)+(n-5)+\\(n-4)+(n-5)+\\(n-4)+(n-5)+\\(n-4)+(n-5)\end{pmatrix}+\\\begin{pmatrix}-\\-\\(n-4)+(n-5)+\\(n-4)+(n-5)+\\(n-4)+(n-5)+\\(n-4)+(n-5)\end{pmatrix}+\begin{pmatrix}-\\-\\(n-4)+(n-5)+\\(n-4)+(n-5)+\\(n-4)+(n-5)+\\(n-4)+(n-5)\end{pmatrix}$](https://habrastorage.org/getpro/habr/formulas/369/e2d/1b9/369e2d1b9f14dc8126fde0b62d3d48e0.svg)
Получается что каждая сумма в скобке обозначает исключившиеся ячейки на трёхмерных слоях. Всего
![$n$](https://habrastorage.org/getpro/habr/formulas/08d/9fa/efb/08d9faefbe272bdf8fbb80773542e343.svg)
четырёхмерных слоёв. Запишем это в виде суммы:
![$\begin{aligned} &C_n^5=\frac{n(n-1)(n-2)(n-3)(n-4)}{2}-\sum_{i_3=1}^n\sum_{i_2=1}^{n-k+4}\sum_{i_1=a}^n\sum_{i_0=k-1}^b(n-i_0)\\ &a=\left\{ \begin{aligned} &k-1, \ если \ i_2=i_3=1 \\ &k-2, \ иначе \\ \end{aligned}\right.\\ &b=\left\{ \begin{aligned} &i_1-2+i_2+i_3, \ если \ i_1-2+i_2+i_3\leqslant n-1 \\ &n-1, \ иначе \\ \end{aligned}\right. \end{aligned}$](https://habrastorage.org/getpro/habr/formulas/071/ffb/2fa/071ffb2fa494b228dac47e6b8ac0d217.svg)
Получается, что последняя сумма суммирует исключившиеся ячейки на одномерных слоях, образуя исключения на двухмерных. Предпоследняя сумма складывает исключившиеся ячейки на двухмерных слоях, образуя исключившиеся ячейки на трёхмерных и т.д.
Индекс второй суммы берем до
![$(n-k+4)$](https://habrastorage.org/getpro/habr/formulas/998/9d3/5a3/9989d35a3d499d0833c816d40ff7c8d6.svg)
, поскольку она «образует» исключения на четырёхмерных слоях, суммируя вычеркнутые ячейки на трёхмерных, как мы могли видеть выше, у пятимерной таблицы на каждом четырёхмерном слое исключается один трёхмерный, то есть для
![$n=6$](https://habrastorage.org/getpro/habr/formulas/0fa/516/e02/0fa516e02a79dbc7e3393a8a18bccd3e.svg)
, на каждом четырёхмерном остается пять трёхмерных слоёв,
![$6-5+4=5$](https://habrastorage.org/getpro/habr/formulas/712/649/a3c/712649a3c3283444bd6dd079c89fa6d2.svg)
.
Для
![$k=6$](https://habrastorage.org/getpro/habr/formulas/a4a/d2a/27e/a4ad2a27e88f173a0476ca178eb88b79.svg)
, шестимерную таблицу можно не смотреть, достаточно выписать индексы её последних трёх измерений:
111 121 131 141 151 161
112 122 132 142 152 162
113 123 133 143 153 163
114 124 134 144 154 164
115 125 135 145 155 165
116 126 136 146 156 166
211 …
212 …
…
Опять же, вычеркнули мы те слои, где хоть одна цифра повторилась. Уже по первому пятимерному слою видно, что на пятимерных слоях для шестимерной таблицы останется на один четырёхмерный слой меньше. Количество оставшихся четырёхмерных слоёв равно
![$(n-k+5)$](https://habrastorage.org/getpro/habr/formulas/5df/5cf/26d/5df5cf26ddb0dba61eee09ce87246509.svg)
. А трёхмерных слоёв на каждом четырёхмерном остается все также
![$(n-k+4)$](https://habrastorage.org/getpro/habr/formulas/998/9d3/5a3/9989d35a3d499d0833c816d40ff7c8d6.svg)
(по 4 в данном случае:
![$6-6+4$](https://habrastorage.org/getpro/habr/formulas/319/eb2/3bc/319eb23bc0919194459fa283d4894f5c.svg)
). Запись в виде сумм получилась такой:
![$\begin{aligned} &C_n^6=\frac{n(n-1)(n-2)(n-3)(n-4)(n-5)}{2}-\sum_{i_4=1}^n\sum_{i_3=1}^{n-k+5}\sum_{i_2=1}^{n-k+4}\sum_{i_1=a}^n\sum_{i_0=k-1}^b(n-i_0)\\ &a=\left\{ \begin{aligned} &k-1, \ если \ i_2=i_3=i_4=1 \\ &k-2, \ иначе \\ \end{aligned}\right.\\ &b=\left\{ \begin{aligned} &i_1-3+i_2+i_3+i_4, \ если \ i_1-3+i_2+i_3+i_4\leqslant n-1 \\ &n-1, \ иначе \\ \end{aligned}\right. \end{aligned}$](https://habrastorage.org/getpro/habr/formulas/dae/e09/725/daee09725fdf0f8253a24790f2771e9e.svg)
Запись для
![$k=3$](https://habrastorage.org/getpro/habr/formulas/c70/8e5/434/c708e5434f493356304a46d3301ef8b0.svg)
можно переписать так:
![$\begin{aligned} &C_n^3=\frac{n(n-1)(n-2)}{2}-\sum_{i_1=a}^n\sum_{i_0=k-1}^b(n-i_0)\\ &a=k-1\\ &b=\left\{ \begin{aligned} &i_1, \ если \ i_1\leqslant n-1 \\ &n-1, \ иначе \\ \end{aligned}\right. \end{aligned}$](https://habrastorage.org/getpro/habr/formulas/4f7/0c0/49a/4f70c049a48901da110e43d594a86c3d.svg)
Для
![$k=4$](https://habrastorage.org/getpro/habr/formulas/9ea/b82/d10/9eab82d10dd1b739c27600fafb303bee.svg)
получается:
![$\begin{aligned} &C_n^4=\frac{n(n-1)(n-2)(n-3)}{2}-\sum_{i_2=1}^n\sum_{i_1=a}^n\sum_{i_0=k-1}^b(n-i_0)\\ &a=\left\{ \begin{aligned} &k-1, \ если \ i_2=1 \\ &k-2, \ иначе \\ \end{aligned}\right.\\ &b=\left\{ \begin{aligned} &i_1-1+i_2, \ если \ i_1-1+i_2\leqslant n-1 \\ &n-1, \ иначе \\ \end{aligned}\right. \end{aligned}$](https://habrastorage.org/getpro/habr/formulas/829/d08/7b1/829d087b1322ae7541160329552a20d6.svg)
Для
![$k=5$](https://habrastorage.org/getpro/habr/formulas/ae0/31e/7c0/ae031e7c0fc2ae504419c098408f88d0.svg)
:
![$\begin{aligned} &C_n^5=\frac{n(n-1)(n-2)(n-3)(n-4)}{2}-\sum_{i_3=1}^n\sum_{i_2=1}^{n-k+4}\sum_{i_1=a}^n\sum_{i_0=k-1}^b(n-i_0)\\ &a=\left\{ \begin{aligned} &k-1, \ если \ i_2=i_3=1 \\ &k-2, \ иначе \\ \end{aligned}\right.\\ &b=\left\{ \begin{aligned} &i_1-2+i_2+i_3, \ если \ i_1-2+i_2+i_3\leqslant n-1 \\ &n-1, \ иначе \\ \end{aligned}\right. \end{aligned}$](https://habrastorage.org/getpro/habr/formulas/071/ffb/2fa/071ffb2fa494b228dac47e6b8ac0d217.svg)
В общем виде запись для
![$k\geqslant2$](https://habrastorage.org/getpro/habr/formulas/c34/263/ce8/c34263ce89147852c9bef0a2d61103d9.svg)
получается такой (сумма, которую мы вычитаем вычисляется рекуррентно):
![$\begin{aligned} &C_n^k=\frac{\prod\limits_{i=n-k+1}^ni}{2}-c_k\\ &k_0=k\\ &c_k=\left\{\begin{aligned} &0, \ k=2 \\ &\sum_{i_3=a}^{n}\sum_{i_2=k-1}^{b}(n-i_2), \ k=3 \\ &\sum_{i_k=1}^{n-k_0+k}c_{k-1}, \ k\geqslant4 \end{aligned}\right. \\ &a=\left\{ \begin{aligned} &k_0-1, \ если \ i_4=i_5=…=i_k=1 \ или \ k_0=3 \\ &k_0-2, \ иначе \end{aligned}\right.\\ &b=\left\{ \begin{aligned} &i_3-(k_0-3)+i_4+i_5+…+i_k, \ если\ i_3-(k-3)+i_4+i_5+…+i_k\leqslant n-1 \ и \ k_0>3 \\ &i_3, \ если\ i_3\leqslant n-1 \ и\ k_0=3 \\ &n-1, \ иначе \end{aligned}\right. \end{aligned}$](https://habrastorage.org/getpro/habr/formulas/82d/b90/f28/82db90f280cbb1940594a7d753b2a93f.svg)
Второй способ
Как я уже писал выше, число сочетаний по 3 можно записать через одну сумму:
![$C_n^3=\frac{n(n-1)(n-2)}{2}-\sum_{i=2}^n\sum_{j=2}^i(n-j)=\frac{n(n-1)(n-2)}{2}-\sum_{i=2}^{n-1}{(n-i)(n-i+1)}$](https://habrastorage.org/getpro/habr/formulas/e03/2d0/684/e032d06840d8d73700c49a16dd47a178.svg)
А число сочетаний из 6 по 4 можно записать так:
![$C_n^4=\frac{n(n-1)(n-2)(n-3)}{2}-\sum_{i=3}^{n-1}{(n-i)\left(30-\sum_{j=1}^{i-2}j\right)}$](https://habrastorage.org/getpro/habr/formulas/726/e0c/3ae/726e0c3ae76e4a73a49b0b7f55f261d6.svg)
Оказывается, что 30 во вторых скобках, это
![$n(n-1)$](https://habrastorage.org/getpro/habr/formulas/076/3b7/855/0763b78554331922f6e3bbcd0c103061.svg)
(логического обоснования этому я так и не смог найти).
![$C_n^4=\frac{n(n-1)(n-2)(n-3)}{2}-\sum_{i=3}^{n-1}{(n-i)\left(n(n-1)-\sum_{j=1}^{i-2}j\right)}$](https://habrastorage.org/getpro/habr/formulas/0fa/f3d/9c6/0faf3d9c6f705efa83b928f382e4db96.svg)
Вторые скобки здесь представляют собой коэффициент, который умножается на
![$(n-i)$](https://habrastorage.org/getpro/habr/formulas/bad/810/07c/bad81007ce8d19acecdea4c0d76bb18c.svg)
. Для
![$k=3$](https://habrastorage.org/getpro/habr/formulas/c70/8e5/434/c708e5434f493356304a46d3301ef8b0.svg)
этот коэффициент просто уменьшается на 1 с каждым слагаемым первой суммы. Для
![$4$](https://habrastorage.org/getpro/habr/formulas/578/281/d89/578281d8997e0a562a02dd61422d408e.svg)
— число, на которое уменьшается этот коэффициент возрастает на 1. Затем я просто посчитал количество слагаемых
![$(n-4)$](https://habrastorage.org/getpro/habr/formulas/541/e5a/e98/541e5ae98298d265f4c4ba6545014c32.svg)
,
![$(n-5)$](https://habrastorage.org/getpro/habr/formulas/ca8/b5b/8a6/ca8b5b8a6d7502622c2aca8bad93b815.svg)
и
![$(n-n)$](https://habrastorage.org/getpro/habr/formulas/d3c/1e7/065/d3c1e7065a03ae1d72168f8081ddf3f7.svg)
в сумме которая вычитается для
![$5$](https://habrastorage.org/getpro/habr/formulas/480/820/0cb/4808200cb3668866f25a2e4437a6b74e.svg)
:
![$119(n-4)+116(n-5)+110(n-n)$](https://habrastorage.org/getpro/habr/formulas/4fc/d5e/c59/4fcd5ec59e4b7d0c2eeb002b954e52b7.svg)
Число, на которое увеличивается число, на которое уменьшается коэффициент, возрастает на 1. Этот коэффициент можно записать через две суммы:
![$C_n^5=\frac{n(n-1)(n-2)(n-3)(n-4)}{2}-\sum_{i=4}^{n-1}{(n-i)\left(n(n-1)(n-2)-\sum_{j_1=1}^{i-3}\sum_{j_0=1}^{j_1}j_0\right)}$](https://habrastorage.org/getpro/habr/formulas/1fb/854/ebe/1fb854ebe10982ffe304ede5d2e2d901.svg)
Зависимость ясна — для
![$k=6$](https://habrastorage.org/getpro/habr/formulas/a4a/d2a/27e/a4ad2a27e88f173a0476ca178eb88b79.svg)
эта формула будет выглядеть так:
![$C_n^6=\frac{n(n-1)(n-2)(n-3)(n-4)(n-5)}{2}\\-\sum_{i=5}^{n-1}{(n-i)\left(n(n-1)(n-2)(n-3)-\sum_{j_2=1}^{i-4}\sum_{j_1=1}^{j_2}\sum_{j_0=1}^{j_1}j_0\right)}$](https://habrastorage.org/getpro/habr/formulas/285/fa7/345/285fa734508861a2a74ee3dc0149b2a2.svg)
А в общем виде (опять же, для
![$k\geqslant2$](https://habrastorage.org/getpro/habr/formulas/c34/263/ce8/c34263ce89147852c9bef0a2d61103d9.svg)
) получилось так:
![$\begin{aligned} &C_n^k=\frac{\prod\limits_{i=n-k+1}^ni}{2}-c_k\\ &k_0=k\\ &c_k=\left\{ \begin{aligned} &0, \ k=2 \\ &\sum_{i=k-1}^{n-1}{(n-i)\left(\prod_{j_k=n-k+3}^nj_k-d_k\right)}, \ если \ k\geqslant3 \\ \end{aligned}\right.\\ &d_k=\left\{ \begin{aligned} &i-1, \ k=3 \\ &\sum_{j_4=1}^lj_4, \ k=4 \\ &\sum_{j_k=1}^ld_{k-1}, \ если \ k>4 \\ &l=j_{k+1}, \ если \ k\neq k_0 \\ &l=i-k_0+2, \ если \ k = k_0 \\ \end{aligned}\right.\\ \end{aligned}$](https://habrastorage.org/getpro/habr/formulas/cdd/d60/2ab/cddd602abbce13444e1f6df74b08a955.svg)
Под конец скажу, что метод действительно получился неоптимальный, хотя мне и было интересно найти его. Фактически, деление на факториал здесь просто заменяется вычитанием, но думаю лишним не будет.