Набір циклічної різниці - це набір натуральних чисел з унікальною властивістю:
- Нехай
nбуде найбільшим цілим числом у наборі. - Нехай
rбудь-яке ціле число (не обов'язково в наборі) більше 0, але менше або дорівнюєn/2. - Нехай
kбуде безліч рішень для ,(b - a) % n = rдеaіbякі елементи набору. Кожне рішення - це впорядкована пара(a,b). (Також зауважте, що ця версія модуля робить негативні числа позитивними, додаючиnдо них, на відміну від реалізацій на багатьох мовах.) - Нарешті, якщо і лише якщо це циклічна різниця, значення значення
kне залежить від вашого виборуr. Тобто всі значенняrдають однакову кількість рішень вищезгаданої конгруентності.
Це можна проілюструвати наступним прикладом:
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)
Кожне значення rмає однакову кількість рішень, 3 у цьому випадку, тому це циклічна різниця.
Вхідні дані
Введенням буде список натуральних чисел. Оскільки це властивість множини, припустимо, що введення не сортується. Можна припустити, що nце принаймні 2, хоча kможе бути і нуль.
Вихідні дані
Ваша програма / функція повинна виводити триєдне значення, якщо набір є циклічним набором різниці, або значення фальси в іншому випадку.
Випробування
Дійсні набори циклічних різниць:
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
( джерело даних , хоча їхня умова відрізняється)
Недійсні циклічні набори різниці:
1,2,3,4,20
57,3,5,7,17,35,38,49
3,4,5,9
14,10,8
bі aє однаковим числом, то (b-a)%n = 00, але 0 не є одним із значень, для яких ви шукаєте рішення. Тож немає явної заборони, щоб вони були однаковими, але їх ніколи не буде.
7 7 7недійсний ввід. Набір не повторює значення
7 7 7був запитом іншого користувача, але я його видалив, оскільки це не набір.
rз 0 < r <= max(input)/2, але замість цього , 0 < r < max(input)тому що ми можемо отримати r > max(input)/2випадки, просто перевернувши віднімання в r <= max(input)/2випадках.
aіbбути тим самим членом (не обов’язковоa ≠ b)?