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 .