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