Набір циклічної різниці - це набір натуральних чисел з унікальною властивістю:
- Нехай
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 = 0
0, але 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
)?