Một số Chuông ( OEIS A000110 ) là số cách để phân vùng một tập hợp của n nhãn yếu tố (riêng biệt). Số chuông 0 được định nghĩa là 1.
Hãy xem xét một số ví dụ (tôi sử dụng dấu ngoặc để biểu thị các tập hợp con và dấu ngoặc cho các phân vùng):
1: {1}
2: {[1,2]}, {[1],[2]}
3: {[1,2,3]}, {[1,2],[3]}, {[1,3],[2]}, {[2,3],[1]}, {[1],[2],[3]}
Có nhiều cách để tính toán số Bell và bạn có thể tự do sử dụng bất kỳ số nào trong số đó. Một cách sẽ được mô tả ở đây:
Cách dễ nhất để tính các số Bell là sử dụng một tam giác số giống với tam giác của Pascal cho các hệ số nhị thức. Các số Bell xuất hiện trên các cạnh của tam giác. Bắt đầu với 1, mỗi hàng mới trong tam giác được xây dựng bằng cách lấy mục cuối cùng trong hàng trước làm mục nhập đầu tiên, sau đó đặt từng mục mới cho hàng xóm bên trái của nó cộng với hàng xóm bên trái phía trên của nó:
1
1 2
2 3 5
5 7 10 15
15 20 27 37 52
Bạn có thể sử dụng lập chỉ mục 0 hoặc lập chỉ mục 1. Nếu bạn sử dụng lập chỉ mục 0, đầu vào của3
nên xuất 5
, nhưng nên xuất 2
nếu bạn sử dụng lập chỉ mục 1.
Chương trình của bạn phải hoạt động đến số Chuông thứ 15, xuất ra 1382958545
. Về lý thuyết, chương trình của bạn sẽ có thể xử lý số lượng lớn hơn (nói cách khác, không mã hóa cứng các giải pháp).
EDIT: Bạn không bắt buộc phải xử lý đầu vào bằng 0 (đối với chỉ mục 0) hoặc 1 (đối với chỉ mục 1) vì nó không được tính theo phương pháp tam giác.
Các trường hợp thử nghiệm (giả sử 0-indexing):
0 -> 1 (OPTIONAL)
1 -> 1
2 -> 2
3 -> 5
4 -> 15
5 -> 52
6 -> 203
7 -> 877
8 -> 4140
9 -> 21147
10 -> 115975
11 -> 678570
12 -> 4213597
13 -> 27644437
14 -> 190899322
15 -> 1382958545
Câu trả lời sử dụng phương pháp tích hợp (như BellB [n] trong Ngôn ngữ Wolfram) trực tiếp tạo ra số Bell sẽ không cạnh tranh.
Mã ngắn nhất (tính bằng byte) thắng.
3
nên đầu ra 2
. Sau đó, những gì đầu vào sẽ 1
cung cấp với 1-indexing?
3
nên xuất5
Nó sẽ xuất hiện15
, phải không? Và với việc lập chỉ mục 1, nó sẽ xuất ra5