tło
Ostatnim razem policzyliśmy grupy o danym rozmiarze , co jest nietrywialnym problemem.
Tym razem policzymy tylko grupy abelowe , tj. Grupy z operacją przemienną. Formalnie, grupę (G *) jest abelową jeśli x * y = y * x w przypadku wszystkich x, y , w G .
W ten sposób problem staje się o wiele prostszy, więc będziemy je skutecznie liczyć.
Zadanie
Napisz program lub funkcję, która przyjmuje nieujemną liczbę całkowitą n jako dane wejściowe i wypisuje lub zwraca liczbę nieizomorficznych abelowych grup rzędu n .
Jednym ze sposobów obliczania liczby grup - które oznaczymy przez A (n) - jest przestrzeganie następujących zasad:
A (0) = 0
Jeśli p jest liczbą pierwszą, A (p k ) jest równe liczbie całkowitych partycji k . ( porównaj OEIS A000041 )
Jeśli n = mk i m oraz k są pierwszymi, A (n) = A (m) A (k) .
Możesz użyć tej lub innej metody obliczania A (n) .
Przypadki testowe
Input Output
0 0
1 1
2 1
3 1
4 2
5 1
6 1
7 1
8 3
9 2
10 1
11 1
12 2
13 1
14 1
15 1
16 5
17 1
18 2
19 1
20 2
4611686018427387904 1300156
5587736968198167552 155232
9223371994482243049 2
(pochodzi z OEIS A000688 )
Dodatkowe zasady
Biorąc pod uwagę wystarczająco dużo czasu, pamięci RAM i rozmiaru rejestru, który może pomieścić dane wejściowe, kod powinien działać (teoretycznie) dla dowolnie dużych liczb całkowitych.
Twój kod musi działać dla wszystkich liczb całkowitych między 0 a 2 63 - 1 i wykończenia w niecałe 10 minut na moim komputerze (Intel i7-3770, 16 GiB RAM, Fedora 21).
Przed przesłaniem odpowiedzi upewnij się, że czas poświęcony został na trzy ostatnie przypadki testowe.
Wbudowane, które trywializują to zadanie, takie jak Mathematica
FiniteAbelianGroupCount, nie są dozwolone.Wbudowane, które zwracają lub liczą całkowite partycje liczby lub partycje listy są niedozwolone.
Obowiązują standardowe zasady gry w golfa .