Hintergrund
Beim letzten Mal haben wir Gruppen einer bestimmten Größe gezählt , was kein einfaches Problem ist.
Dieses Mal werden nur abelsche Gruppen gezählt , dh Gruppen mit einer kommutativen Operation. Formal ist eine Gruppe (G, ∗) abelsch, wenn x ∗ y = y ∗ x für alle x, y in G ist .
Auf diese Weise wird das Problem viel einfacher, und wir werden sie effizient zählen.
Aufgabe
Schreiben Sie ein Programm oder eine Funktion, die eine nicht negative ganze Zahl n als Eingabe akzeptiert und die Anzahl der nicht isomorphen abelschen Gruppen der Ordnung n ausgibt oder zurückgibt .
Eine Möglichkeit, die Anzahl der Gruppen zu berechnen, die wir mit A (n) bezeichnen, besteht darin, Folgendes zu beachten:
A (0) = 0
Wenn p eine Primzahl ist, ist A (p k ) gleich der Anzahl von ganzzahligen Partitionen von k . (vgl. OEIS A000041 )
Wenn n = mk und m und k Co-Primer sind, ist A (n) = A (m) A (k) .
Sie können diese oder eine andere Methode zur Berechnung von A (n) verwenden .
Testfälle
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
(entnommen aus OEIS A000688 )
Zusätzliche Regeln
Bei genügend Zeit, RAM und einer Registergröße, die die Eingabe aufnehmen kann, sollte Ihr Code (theoretisch) für beliebig große ganze Zahlen funktionieren.
Ihr Code muss für alle Ganzzahlen zwischen 0 und 2 63 - 1 funktionieren und auf meinem Computer (Intel i7-3770, 16 GiB RAM, Fedora 21) in weniger als 10 Minuten fertig sein.
Stellen Sie sicher, dass Sie Ihren Code für die letzten drei Testfälle zeitlich festgelegt haben, bevor Sie Ihre Antwort senden.
Integrierte Funktionen, die diese Aufgabe banalisieren, wie z. B. die von Mathema- tica
FiniteAbelianGroupCount
, sind nicht zulässig.Integrierte Funktionen, die die ganzzahligen Partitionen einer Zahl oder die Partitionen einer Liste zurückgeben oder zählen, sind nicht zulässig.
Es gelten die Standardregeln für Code-Golf .