W subfactorial lub rencontres numery ( A000166 ) są sekwencje o numerach podobnych do silni liczb, które pojawiają się w kombinatoryki permutacji. W szczególności n th subfactorial ! N daje liczbę zaburzeniami z zestawem n elementów. Wykolejenie to permutacja, w której żaden element nie pozostaje w tej samej pozycji. Podfaktor można zdefiniować za pomocą następującej relacji powtarzalności:
!n = (n-1) (!(n-1) + !(n-2))
W rzeczywistości ta sama relacja powtarzalności obowiązuje dla silni, ale dla podfrakcji zaczynamy od:
!0 = 1
!1 = 0
(Dla silni mielibyśmy oczywiście 1! = 1 ).
Twoim zadaniem jest obliczenie ! N , biorąc pod uwagę n .
Zasady
Podobnie jak silnia, podfaktor rośnie bardzo szybko. W porządku, jeśli twój program może obsługiwać tylko takie dane wejściowe n , że ! N może być reprezentowany przez rodzimy typ liczbowy twojego języka. Jednak twój algorytm musi teoretycznie działać dla dowolnego n . Oznacza to, że możesz założyć, że wyniki całkowite i wartość pośrednia mogą być reprezentowane dokładnie przez Twój język. Zauważ, że wyklucza to stałą e, jeśli jest przechowywana lub obliczana ze skończoną precyzją.
Wynik musi być dokładną liczbą całkowitą (w szczególności nie można przybliżać wyniku za pomocą notacji naukowej).
Możesz napisać program lub funkcję i użyć dowolnej ze standardowych metod odbierania danych wejściowych i dostarczania danych wyjściowych.
Możesz używać dowolnego języka programowania , ale pamiętaj, że te luki są domyślnie zabronione.
To jest golf golfowy , więc wygrywa najkrótsza ważna odpowiedź - mierzona w bajtach .
Przypadki testowe
n !n
0 1
1 0
2 1
3 2
4 9
5 44
6 265
10 1334961
12 176214841
13 2290792932
14 32071101049
20 895014631192902121
21 18795307255050944540
100 34332795984163804765195977526776142032365783805375784983543400282685180793327632432791396429850988990237345920155783984828001486412574060553756854137069878601