Фон
Минулого разу ми підраховували групи заданого розміру , що є нетривіальною проблемою.
На цей раз ми будемо рахувати лише абелеві групи , тобто групи з комутативною операцією. Формально група (G, ∗) є абелевою, якщо x ∗ y = y ∗ x для всіх x, y в G .
Проблема стає набагато простішою, тому ми будемо їх ефективно рахувати.
Завдання
Напишіть програму або функцію, яка приймає невід'ємне ціле число n як вхідне і друкує або повертає кількість неізоморфних абелевих груп порядку n .
Один із способів обчислення кількості груп - який ми позначимо через A (n) - це шляхом дотримання наступного:
A (0) = 0
Якщо p є простим, A (p k ) дорівнює кількості цілих розділів k . (пор. OEIS A000041 )
Якщо n = mk , а m і k є спільними простими, A (n) = A (m) A (k) .
Ви можете використовувати цей або будь-який інший метод обчислення A (n) .
Тестові справи
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
(взято з OEIS A000688 )
Додаткові правила
Враховуючи достатньо часу, оперативної пам’яті та розміру регістру, який може вмістити вхід, ваш код повинен працювати (теоретично) для довільно великих цілих чисел.
Ваш код повинен працювати для всіх цілих чисел від 0 до 2 63 - 1 і закінчуватись менше 10 хвилин на моїй машині (Intel i7-3770, 16 Гб оперативної пам’яті, Fedora 21).
Будь ласка, переконайтесь, що ви вкажете свій код для останніх трьох тестових випадків, перш ніж надсилати відповідь.
Вбудовані модулі, які реалізують це завдання, такі як Mathematica
FiniteAbelianGroupCount
, заборонені.Вбудовані модулі, які повертають або рахують цілі розділи числа або розділи списку, не дозволені.
Діють стандартні правила гольф-коду .