Набор циклических разностей представляет собой набор натуральных чисел с уникальным свойством:
- Позвольте
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
)?