Liczba Bell ( OEIS A000110 ) jest kilka sposobów do podsystemu zbiór N oznaczonych (odrębne) elementów. Numer 0 dzwonka jest zdefiniowany jako 1.
Spójrzmy na kilka przykładów (używam nawiasów, aby oznaczyć podzbiory i nawiasy klamrowe dla partycji):
1: {1}
2: {[1,2]}, {[1],[2]}
3: {[1,2,3]}, {[1,2],[3]}, {[1,3],[2]}, {[2,3],[1]}, {[1],[2],[3]}
Istnieje wiele sposobów obliczania numerów dzwonków i możesz dowolnie z nich korzystać. Tutaj zostanie opisany jeden sposób:
Najłatwiejszym sposobem obliczenia liczb Bell jest użycie trójkąta liczbowego przypominającego trójkąt Pascala dla współczynników dwumianowych. Numery dzwonków pojawiają się na krawędziach trójkąta. Zaczynając od 1, każdy nowy rząd w trójkącie jest konstruowany poprzez pobranie ostatniego wpisu w poprzednim rzędzie jako pierwszego, a następnie ustawienie każdego nowego wpisu do jego lewego sąsiada plus jego górnego lewego sąsiada:
1
1 2
2 3 5
5 7 10 15
15 20 27 37 52
Możesz użyć indeksowania 0 lub indeksowania 1. Jeśli używasz indeksowania 0, wejście 3powinno wypisywać 5, ale powinno wypisywać, 2jeśli używasz indeksowania 1.
Twój program musi działać do 15. numeru dzwonka, wysyłając 1382958545. Teoretycznie twój program powinien być w stanie obsługiwać większe liczby (innymi słowy, nie koduj rozwiązań na stałe).
EDYCJA: Nie musisz obsługiwać danych wejściowych 0 (dla indeksowania 0) lub 1 (dla indeksowania 1), ponieważ nie są one obliczane metodą trójkąta.
Przypadki testowe (przy założeniu indeksowania 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
Odpowiedzi przy użyciu wbudowanej metody (takiej jak BellB [n] w języku Wolfram), która bezpośrednio wytwarza liczby Bell, będą niekonkurencyjne.
Najkrótszy kod (w bajtach) wygrywa.
3wyjściowe powinny być wyprowadzane 2. Co wtedy 1da dane wejściowe przy indeksowaniu 1?



3powinno5wypisać To wyrzuciłoby15, prawda? I z 1-indeksowaniem dałoby wynik5