Фон
В прошлый раз мы посчитали группы заданного размера , что является нетривиальной задачей.
На этот раз мы будем считать только абелевы группы , т. Е. Группы с коммутативной операцией. Формально группа (G, *) абелева , если х * у = у * х для для всех х, у в 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, не допускаются.Встроенные модули, которые возвращают или подсчитывают целочисленные разделы числа или разделы списка, не допускаются.
Применяются стандартные правила игры в гольф .