Un conjunto de diferencias cíclicas es un conjunto de enteros positivos con una propiedad única:
- Deje
nser el número entero más grande del conjunto. - Sea
rcualquier número entero (no necesariamente en el conjunto) mayor que 0 pero menor o igual quen/2. - Deje
kser el número de soluciones para(b - a) % n = rdóndeaybson 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
kno depende de su elecciónr. Es decir, todos los valores derdan 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 rtiene 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 nes al menos 2, aunque kpuede 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
by ason 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 7fuera una entrada no válida. Un conjunto no repite valores
7 7 7fue solicitado por otro usuario, pero lo eliminé porque no es un conjunto.
rpor 0 < r <= max(input)/2, pero en su lugar 0 < r < max(input), ya que podemos obtener r > max(input)/2de los casos con sólo girar la sustracción de r <= max(input)/2los casos.
aybser el mismo miembro (no necesariamentea ≠ b)?