배경
지난번 에는 주어진 크기의 그룹을 세었습니다 . 이는 사소한 문제가 아닙니다.
이번에는 Abelian 그룹 , 즉 정류 작업을 수행하는 그룹 만 계산 합니다. 공식적으로, 그룹 (G *)은 아벨이면 X * Y = X * Y 모두에 대한 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 에서 가져옴 )
추가 규칙
충분한 시간, RAM 및 입력을 보유 할 수있는 레지스터 크기가 주어지면 코드는 이론적으로 임의의 큰 정수에서 작동해야합니다.
코드는 모든 정수 사이에 작동해야한다 0 과 2 63 일 - 내 컴퓨터 10 분 (인텔 i7-3770, 16 지브 RAM, 페도라 21)에서의 마무리.
답변을 제출하기 전에 마지막 세 가지 테스트 사례에 대한 코드 시간을 확인하십시오.
Mathematica와 같은이 작업을 사소한 내장 기능
FiniteAbelianGroupCount
은 허용되지 않습니다.숫자의 정수 파티션이나 목록의 파티션을 반환하거나 계산하는 내장 기능은 허용되지 않습니다.
표준 코드 골프 규칙이 적용됩니다.