UNE numéro de Bell ( OEIS A000110 ) est le nombre de façons de partitionner un ensemble de n éléments (distincts) étiquetés. Le 0e numéro de Bell est défini comme 1.
Regardons quelques exemples (j'utilise des crochets pour désigner les sous-ensembles et les accolades pour les partitions):
1: {1}
2: {[1,2]}, {[1],[2]}
3: {[1,2,3]}, {[1,2],[3]}, {[1,3],[2]}, {[2,3],[1]}, {[1],[2],[3]}
Il y a plusieurs façons de calculer les numéros de Bell, et vous êtes libre d'utiliser n'importe lequel d'entre eux. Une façon sera décrite ici:
La façon la plus simple de calculer les nombres de Bell est d'utiliser un triangle numérique ressemblant au triangle de Pascal pour les coefficients binomiaux. Les numéros de Bell apparaissent sur les bords du triangle. En commençant par 1, chaque nouvelle ligne du triangle est construite en prenant la dernière entrée de la ligne précédente comme première entrée, puis en définissant chaque nouvelle entrée sur son voisin gauche plus son voisin supérieur gauche:
1
1 2
2 3 5
5 7 10 15
15 20 27 37 52
Vous pouvez utiliser l'indexation 0 ou l'indexation 1. Si vous utilisez l'indexation 0, une entrée de 3devrait sortir 5, mais devrait sortir 2si vous utilisez l'indexation 1.
Votre programme doit fonctionner jusqu'au 15e numéro de Bell, produisant 1382958545 . En théorie, votre programme devrait être capable de gérer de plus grands nombres (en d'autres termes, ne codez pas en dur les solutions).
EDIT: vous n'êtes pas obligé de gérer une entrée de 0 (pour l'indexation 0) ou 1 (pour l'indexation 1) car elle n'est pas calculée par la méthode du triangle.
Cas de test (en supposant une indexation 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
Les réponses utilisant une méthode intégrée (comme BellB [n] dans le Wolfram Language) qui produisent directement des numéros de Bell ne seront pas compétitives.
Le code le plus court (en octets) gagne.
3devrait sortir 2. Que donnerait alors l'entrée 1avec l'indexation 1?



3devrait sortir5Elle sortirait15, non? Et avec l'indexation 1, cela produirait5