Номер дзвоника ( OEIS A000110 ) - це кількість способів розділити набір з n мічених (різних) елементів. Номер 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
. Теоретично ваша програма повинна вміти обробляти більшу кількість (іншими словами, не жорстко кодуйте рішення).
EDIT: Вам не потрібно обробляти введення 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), який безпосередньо створює номери Белла, будуть неконкурентоспроможними.
Найкоротший код (у байтах) виграє.
3
повинен виводити 2
. Тоді що введення 1
дасть при 1-індексації?
3
повинен виводити5
це буде вичерпано15
, чи не так? І при 1-індексації це вийде5