Cho phép lấy một tập hợp các số nguyên lớn hơn 1 và gọi nó là X . Chúng ta sẽ định nghĩa S (i) là tập hợp tất cả các thành viên của X chia hết cho i trong đó i> 1 . Muốn chọn từ các tập hợp con này một nhóm các tập hợp sao cho
Liên minh của họ là tập X
Không có phần tử nào của X nằm trong hai trong số các tập hợp.
Ví dụ: chúng ta có thể tập hợp lại {3..11}
thành
{3,4,5,6,7,8,9,10,11}
S(3): {3, 6, 9, }
S(4): { 4, 8, }
S(5): { 5, 10, }
S(7): { 7, }
S(11):{ 11}
Một số bộ không thể được thể hiện theo cách này. Ví dụ: nếu chúng ta lấy {3..12}
, 12
là bội số của cả 3 và 4 ngăn các bộ của chúng ta loại trừ lẫn nhau.
Một số bộ có thể được thể hiện theo nhiều cách, ví dụ {4..8}
có thể được biểu diễn dưới dạng
{4,5,6,7,8}
S(4): {4, 8}
S(5): { 5, }
S(6): { 6, }
S(7): { 7, }
nhưng nó cũng có thể được biểu diễn dưới dạng
{4,5,6,7,8}
S(2): {4, 6, 8}
S(5): { 5, }
S(7): { 7, }
Bài tập
Mục tiêu của chúng tôi là viết một chương trình sẽ lấy một bộ làm đầu vào và đầu ra số lượng tập con nhỏ nhất bao trùm nó theo kiểu này. Nếu không có, bạn nên xuất một số giá trị khác với số nguyên dương (ví dụ 0
).
Đây là một câu hỏi golf-code vì vậy câu trả lời sẽ được tính bằng byte, với ít byte hơn sẽ tốt hơn.
Xét nghiệm
{3..11} -> 5
{4..8} -> 3
{22,24,26,30} -> 1
{5} -> 1
[5..5]
nào? Chúng ta có thể nhận được những thứ như thế [8..4]
nào?
12
Là bội số của cả hai 3
và 4
ngăn chặn các bộ của chúng tôi loại trừ lẫn nhau ": tại sao? Tôi không thấy bất cứ điều gì khác trong báo cáo vấn đề đòi hỏi 12
phải đi vào cả hai tập hợp con.
[22,24,26,30]
là tất cả bội số của 2
. Bạn có chắc chắn sẽ tốt hơn nếu xóa cái này và hộp cát không?