Номер Белл ( OEIS A000110 ) является количеством способов разбиения набора п меченых (различных) элементов. Номер 0-го звонка определяется как 1.
Давайте рассмотрим несколько примеров (я использую скобки для обозначения подмножеств и скобок для разделов):
1: {1}
2: {[1,2]}, {[1],[2]}
3: {[1,2,3]}, {[1,2],[3]}, {[1,3],[2]}, {[2,3],[1]}, {[1],[2],[3]}
Есть много способов вычислить числа Белла, и вы можете использовать любой из них. Один из способов будет описан здесь:
Самый простой способ вычислить числа Белла - это использовать числовой треугольник, напоминающий треугольник Паскаля, для биномиальных коэффициентов. Числа Белла появляются на краях треугольника. Начиная с 1, каждая новая строка в треугольнике строится путем взятия последней записи в предыдущей строке в качестве первой записи, а затем установки каждой новой записи для ее левого соседа плюс его верхнего левого соседа:
1
1 2
2 3 5
5 7 10 15
15 20 27 37 52
Вы можете использовать 0-индексирование или 1-индексирование. Если вы используете 0-индексирование, ввод 3
должен выводить 5
, но должен выводить, 2
если вы используете 1-индексацию.
Ваша программа должна работать до 15-го числа Белла, выводя 1382958545
. Теоретически, ваша программа должна быть способна обрабатывать большие числа (другими словами, не жестко кодировать решения).
РЕДАКТИРОВАТЬ: вам не нужно обрабатывать ввод 0 (для индексации 0) или 1 (для индексации 1), потому что он не рассчитывается методом треугольника.
Тестовые случаи (при условии 0-индексации):
0 -> 1 (OPTIONAL)
1 -> 1
2 -> 2
3 -> 5
4 -> 15
5 -> 52
6 -> 203
7 -> 877
8 -> 4140
9 -> 21147
10 -> 115975
11 -> 678570
12 -> 4213597
13 -> 27644437
14 -> 190899322
15 -> 1382958545
Ответы, использующие встроенный метод (такой как BellB [n] в языке Wolfram Language), который напрямую генерирует числа Белла, будут неконкурентоспособными.
Самый короткий код (в байтах) выигрывает.
3
должен выводиться 2
. Тогда что даст вход 1
с 1-индексацией?
3
вывода должны5
были бы Ouput15
, верно? И с 1-индексированием это5