Набор циклических разностей представляет собой набор натуральных чисел с уникальным свойством:
- Позвольте
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, так что это набор циклических разностей.
вход
На входе будет список положительных чисел. Поскольку это свойство set, предположим, что входные данные не отсортированы. Можно предположить, что 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 не является одним из значений, для которых вы ищете решения. Так что нет явного запрета на их одинаковое число, но они никогда не будут.
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)?