Lý lịch
Thời gian qua, chúng tôi đã tính các nhóm có kích thước nhất định , đây là một vấn đề không hề nhỏ.
Lần này, chúng tôi sẽ chỉ tính các nhóm Abelian , tức là các nhóm có hoạt động giao hoán. Chính thức, một nhóm (G, *) là Abel nếu x * y = y * x cho cho tất cả x, y trong G .
Vấn đề trở nên đơn giản hơn nhiều theo cách này, vì vậy chúng tôi sẽ tính chúng một cách hiệu quả.
Bài tập
Viết chương trình hoặc hàm chấp nhận số nguyên n không âm làm đầu vào và in hoặc trả về số lượng các nhóm Abel không đẳng cấu của đơn hàng n .
Một cách tính số lượng nhóm - mà chúng tôi sẽ biểu thị bằng A (n) - bằng cách tuân thủ các điều sau:
A (0) = 0
Nếu p là số nguyên tố, A (p k ) bằng số phân vùng nguyên của k . (cfr. OEIS A000041 )
Nếu n = mk và m và k là đồng nguyên tố thì A (n) = A (m) A (k) .
Bạn có thể sử dụng phương pháp này hoặc bất kỳ phương pháp tính A (n) nào khác .
Các trường hợp thử nghiệm
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
(lấy từ OEIS A000688 )
Quy tắc bổ sung
Cho đủ thời gian, RAM và kích thước thanh ghi có thể giữ đầu vào, mã của bạn sẽ hoạt động (theo lý thuyết) cho các số nguyên lớn tùy ý.
Mã của bạn phải hoạt động cho tất cả các số nguyên trong khoảng từ 0 đến 2 63 - 1 và hoàn thành trong vòng dưới 10 phút trên máy của tôi (Intel i7-3770, RAM 16 GiB, Fedora 21).
Vui lòng đảm bảo rằng bạn dành thời gian mã cho ba trường hợp kiểm tra cuối cùng trước khi gửi câu trả lời của bạn.
Các phần mềm xây dựng tầm thường hóa nhiệm vụ này, chẳng hạn như Mathicala
FiniteAbelianGroupCount
, không được phép.Tích hợp trả về hoặc đếm các phân vùng nguyên của một số hoặc các phân vùng của danh sách không được phép.
Luật golf tiêu chuẩn được áp dụng.