Tập khác biệt theo chu kỳ là một tập hợp các số nguyên dương có thuộc tính duy nhất:
- Hãy
n
là số nguyên lớn nhất trong tập hợp. - Đặt
r
bất kỳ số nguyên nào (không nhất thiết trong tập hợp) lớn hơn 0 nhưng nhỏ hơn hoặc bằngn/2
. - Hãy
k
là số giải pháp để(b - a) % n = r
nơia
vàb
bất kỳ thành viên của bộ này. Mỗi giải pháp là một cặp theo thứ tự(a,b)
. (Cũng lưu ý rằng phiên bản modulo này làm cho số âm trở nên tích cực bằng cách thêmn
vào nó, không giống như việc triển khai bằng nhiều ngôn ngữ.) - Cuối cùng, nếu và chỉ khi đây là một bộ khác biệt theo chu kỳ, giá trị của
k
không phụ thuộc vào sự lựa chọn của bạnr
. Đó là, tất cả các giá trịr
đưa ra cùng một số giải pháp cho sự phù hợp ở trên.
Điều này có thể được minh họa bằng ví dụ sau:
Cyclic difference set: {4,5,6,8,9,11}
0 < r <= 11/2, so r = 1,2,3,4,5
r=1: (4,5) (5,6) (8,9)
r=2: (4,6) (6,8) (9,11)
r=3: (5,8) (6,9) (8,11)
r=4: (4,8) (5,9) (11,4) since (4-11)%11=(-7)%11=4
r=5: (4,9) (6,11) (11,5)
Mỗi giá trị của r
có cùng số lượng giải pháp, 3 trong trường hợp này, vì vậy đây là một tập hợp chênh lệch theo chu kỳ.
Đầu vào
Đầu vào sẽ là một danh sách các số nguyên dương. Vì đây là thuộc tính được đặt, giả sử rằng đầu vào không được sắp xếp. Bạn có thể cho rằng đó n
là ít nhất 2
, mặc dù k
có thể bằng không.
Đầu ra
Chương trình / hàm của bạn sẽ xuất ra một giá trị trung thực nếu tập hợp là tập khác biệt theo chu kỳ hoặc giá trị falsey khác.
Các trường hợp thử nghiệm
Bộ khác biệt tuần hoàn hợp lệ:
10,12,17,18,21
7,5,4
57,1,5,7,17,35,38,49
1,24,35,38,40,53,86,108,114,118,135,144,185,210,254,266,273
16,3,19,4,8,10,15,5,6
8,23,11,12,15,2,3,5,7,17,1
( nguồn dữ liệu , mặc dù quy ước của họ là khác nhau)
Bộ khác biệt theo chu kỳ không hợp lệ:
1,2,3,4,20
57,3,5,7,17,35,38,49
3,4,5,9
14,10,8
b
và a
là cùng một số, (b-a)%n = 0
nhưng 0 không phải là một trong những giá trị mà bạn đang tìm giải pháp. Vì vậy, không có sự cấm đoán rõ ràng đối với họ là cùng một số, nhưng họ sẽ không bao giờ.
7 7 7
đầu vào không hợp lệ. Một tập hợp không lặp lại các giá trị
7 7 7
là một yêu cầu của người dùng khác, nhưng tôi đã xóa nó vì nó không phải là một bộ.
r
bởi 0 < r <= max(input)/2
, nhưng thay vào đó 0 < r < max(input)
bởi vì chúng ta có thể có được r > max(input)/2
các trường hợp bằng cách đơn giản là trừ đi các phép trừ trong r <= max(input)/2
các trường hợp.
a
vàb
là cùng một thành viên (không nhất thiếta ≠ b
)?