Un ensemble de différences cycliques est un ensemble d'entiers positifs avec une propriété unique:
- Soit
n
le plus grand entier de l'ensemble. - Soit
r
n'importe quel entier (pas nécessairement dans l'ensemble) supérieur à 0 mais inférieur ou égal àn/2
. - Laissez -
k
le nombre de solutions à(b - a) % n = r
oùa
etb
sont 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
k
ne dépend pas de votre choix der
. Autrement dit, toutes les valeurs der
donnent 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 r
a 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 n
c'est au moins 2
, mais k
peut ê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
b
et a
sont 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 7
soit une entrée non valide. Un ensemble ne répète pas les valeurs
7 7 7
a été demandé par un autre utilisateur, mais je l'ai supprimé car il ne s'agit pas d'un ensemble.
r
par 0 < r <= max(input)/2
, mais plutôt 0 < r < max(input)
parce que nous pouvons obtenir des r > max(input)/2
cas en retournant simplement la soustraction en r <= max(input)/2
cas.
a
etb
être le même membre (pas nécessairementa ≠ b
)?