Một vòng lặp là một cấu trúc đại số khá đơn giản. Nó là một tuple (G, +) nơi G là một tập hợp và + là một nhà điều hành nhị phân G × G → G . Đó là + lấy hai phần tử từ G và trả về một phần tử mới. Toán tử cũng được yêu cầu thực hiện hai thuộc tính
Hủy bỏ: Với mỗi a và b trong G tồn tại x và y duy nhất trong G sao cho
a + x = b y + a = b
Danh tính: Có một e trong G sao cho mỗi a trong G
e + a = a a + e = a
Nếu bạn quen thuộc với khái niệm nhóm, bạn có thể nhận thấy rằng vòng lặp chỉ là một nhóm không có thuộc tính kết hợp.
Vòng lặp khá đơn giản để mọi người thích thêm nhiều quy tắc để tạo ra các cấu trúc mới thú vị hơn. Một cấu trúc như vậy là một vòng lặp Mou Phường là một vòng lặp cũng thỏa mãn bốn danh tính sau đây cho x , y và z trong G
z + (x + (z + y)) = ((z + x) + z) + y
((y + z) + x) + z = y + (z + (x + z))
(z + x) + (y + z) = (z + (x + y)) + z
(z + x) + (y + z) = z + ((x + y) + z)
Ví dụ, bảng Cayley sau đây biểu thị một vòng lặp Mou Phường:
0 1 2 3
1 0 3 2
2 3 0 1
3 2 1 0
(Nếu bạn không quen thì bảng Cayley là ma trận vuông M trong đó M i, j bằng i + j . Đây là một cách thuận tiện để biểu diễn các toán tử nhị phân trên một tập hợp.)
Chúng tôi có thể chỉ ra rằng có một bản sắc khá dễ dàng 0
. Hủy bỏ là một chút khó khăn hơn để hiển thị nhưng một cách tiếp cận vũ phu mang lại bảng này
b a → 0 1 2 3
↓
0 0 1 2 3
1 1 0 3 2
2 2 3 0 1
3 3 2 1 0
Yếu tố của chúng ta là giải pháp để
a + x = b = x + a
(Bạn có thể nhận thấy rằng bảng này giống hệt với bảng Cayley của chúng tôi. Tôi sẽ để nó như một bài tập cho người đọc để tìm hiểu lý do tại sao đây là trường hợp của vòng lặp Mou Phường này)
Bây giờ chúng tôi cần xác minh danh tính Mou Phường cho cấu trúc của chúng tôi. Có hai cách để làm điều này đối với cấu trúc cụ thể, cách đầu tiên là nhận ra rằng nó có tính kết hợp và do đó tự động đáp ứng các tiêu chí, tuy nhiên điều này sẽ không hoạt động nói chung vì vậy chúng tôi muốn buộc phải kết quả. Có 3 biến miễn phí, mỗi biến có tiềm năng 4 giá trị trong mỗi biểu thức ở đây. Điều này có nghĩa là chúng ta phải thực hiện tính toán 7 * 4 3 hoặc 448. Tôi sẽ bỏ qua các tính toán thô nhưng đây là một số Haskell bạn có thể sử dụng để xác minh điều này .
Bài tập
Cho một số nguyên dương n là đầu ra đầu vào, số vòng lặp Mou Phường có thứ tự n . (thứ tự của một nhóm là kích thước của tập hợp)
Đây là môn đánh gôn, vì vậy câu trả lời sẽ được tính bằng byte với ít byte hơn.
Các trường hợp thử nghiệm
Đây là số vòng lặp Mou Phường cho 71 đầu vào đầu tiên
1,1,1,2,1,2,1,5,2,2,1,6,1,2,1,19,1,5,1,6,2,2,1,20,2,2,5,5,1,4,1,122,1,2,1,18,1,2,2,19,1,7,1,5,2,2,1,103,2,5,1,6,1,17,2,17,2,2,1,18,1,2,4,4529,1,4,1,6,1,4,1
12
không phải của bạn 11
. Tôi nên nhận ra rằng bởi vì 11
là số nguyên tố.