Un ensemble de différences cycliques est un ensemble d'entiers positifs avec une propriété unique:
- Soit
nle plus grand entier de l'ensemble. - Soit
rn'importe quel entier (pas nécessairement dans l'ensemble) supérieur à 0 mais inférieur ou égal àn/2. - Laissez -
kle nombre de solutions à(b - a) % n = roùaetbsont des membres de l'ensemble. Chaque solution est une paire ordonnée(a,b). (Notez également que cette version de modulo rend les nombres négatifs positifs en y ajoutantn, contrairement aux implémentations dans de nombreuses langues.) - Enfin, si et seulement s'il s'agit d'un ensemble de différences cycliques, la valeur de
kne dépend pas de votre choix der. Autrement dit, toutes les valeurs derdonnent le même nombre de solutions à la congruence ci-dessus.
Cela peut être illustré par l'exemple suivant:
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)
Chaque valeur de ra le même nombre de solutions, 3 dans ce cas, il s'agit donc d'un ensemble de différences cycliques.
Contribution
L'entrée sera une liste d'entiers positifs. Puisqu'il s'agit d'une propriété set, supposez que l'entrée n'est pas triée. Vous pouvez supposer que nc'est au moins 2, mais kpeut être nul.
Production
Votre programme / fonction doit sortir une valeur véridique si l'ensemble est un ensemble de différence cyclique, ou une valeur de falsey sinon.
Cas de test
Ensembles de différences cycliques valides:
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
( source de données , bien que leur convention soit différente)
Ensembles de différences cycliques non valides:
1,2,3,4,20
57,3,5,7,17,35,38,49
3,4,5,9
14,10,8
bet asont le même nombre, alors (b-a)%n = 0, mais 0 n'est pas l'une des valeurs pour lesquelles vous recherchez des solutions. Il n'y a donc pas d'interdiction explicite de leur donner le même numéro, mais ils ne le seront jamais.
7 7 7soit une entrée non valide. Un ensemble ne répète pas les valeurs
7 7 7a été demandé par un autre utilisateur, mais je l'ai supprimé car il ne s'agit pas d'un ensemble.
rpar 0 < r <= max(input)/2, mais plutôt 0 < r < max(input)parce que nous pouvons obtenir des r > max(input)/2cas en retournant simplement la soustraction en r <= max(input)/2cas.
aetbêtre le même membre (pas nécessairementa ≠ b)?