Un conjunto de diferencias cíclicas es un conjunto de enteros positivos con una propiedad única:
- Deje
n
ser el número entero más grande del conjunto. - Sea
r
cualquier número entero (no necesariamente en el conjunto) mayor que 0 pero menor o igual quen/2
. - Deje
k
ser el número de soluciones para(b - a) % n = r
dóndea
yb
son miembros del conjunto. Cada solución es un par ordenado(a,b)
. (También tenga en cuenta que esta versión del módulo hace que los números negativos sean positivos al agregarlen
, a diferencia de las implementaciones en muchos idiomas). - Finalmente, si y solo si este es un conjunto de diferencias cíclicas, el valor de
k
no depende de su elecciónr
. Es decir, todos los valores der
dan el mismo número de soluciones a la congruencia anterior.
Esto se puede ilustrar con el siguiente ejemplo:
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)
Cada valor de r
tiene el mismo número de soluciones, 3 en este caso, por lo que este es un conjunto de diferencias cíclicas.
Entrada
La entrada será una lista de enteros positivos. Como se trata de una propiedad establecida, suponga que la entrada no está ordenada. Puede suponer que n
es al menos 2
, aunque k
puede ser cero.
Salida
Su programa / función debería generar un valor verdadero si el conjunto es un conjunto de diferencia cíclica, o un valor falso de lo contrario.
Casos de prueba
Conjuntos de diferencia cíclica válidos:
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
( fuente de datos , aunque su convención es diferente)
Conjuntos de diferencia cíclica no válidos:
1,2,3,4,20
57,3,5,7,17,35,38,49
3,4,5,9
14,10,8
b
y a
son el mismo número, entonces (b-a)%n = 0
, pero 0 no es uno de los valores para los que está buscando soluciones. Por lo tanto, no existe una prohibición explícita de que sean el mismo número, pero nunca lo serán.
7 7 7
fuera una entrada no válida. Un conjunto no repite valores
7 7 7
fue solicitado por otro usuario, pero lo eliminé porque no es un conjunto.
r
por 0 < r <= max(input)/2
, pero en su lugar 0 < r < max(input)
, ya que podemos obtener r > max(input)/2
de los casos con sólo girar la sustracción de r <= max(input)/2
los casos.
a
yb
ser el mismo miembro (no necesariamentea ≠ b
)?