Un set di differenze cicliche è un set di numeri interi positivi con una proprietà unica:
- Lascia che
nsia il numero intero più grande nel set. - Sia
rqualsiasi numero intero (non necessariamente nell'insieme) maggiore di 0 ma minore o uguale an/2. - Sia
kil numero di soluzioni per(b - a) % n = rdoveae perbogni membro dell'insieme. Ogni soluzione è una coppia ordinata(a,b). (Si noti inoltre che questa versione di modulo rende positivi i numeri negativi aggiungendovin, a differenza delle implementazioni in molte lingue.) - Infine, se e solo se si tratta di una differenza ciclica impostata, il valore di
knon dipende dalla scelta dell'utenter. Cioè, tutti i valori dirdanno lo stesso numero di soluzioni alla congruenza di cui sopra.
Questo può essere illustrato con il seguente esempio:
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)
Ogni valore di rha lo stesso numero di soluzioni, 3 in questo caso, quindi questa è una serie di differenze cicliche.
Ingresso
L'input sarà un elenco di numeri interi positivi. Poiché si tratta di una proprietà set, supponiamo che l'input non sia ordinato. Puoi presumere che nsia almeno 2, sebbene kpossa essere zero.
Produzione
Il tuo programma / funzione dovrebbe generare un valore di verità se l'insieme è un insieme di differenze cicliche, o altrimenti un valore di falso.
Casi test
Set di differenze cicliche validi:
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
( origine dati , sebbene la loro convenzione sia diversa)
Set di differenze cicliche non valide:
1,2,3,4,20
57,3,5,7,17,35,38,49
3,4,5,9
14,10,8
be ahanno lo stesso numero, quindi (b-a)%n = 0, ma 0 non è uno dei valori per cui stai cercando soluzioni. Quindi non c'è un divieto esplicito che siano lo stesso numero, ma non lo saranno mai.
7 7 7fosse un input non valido. Un set non ripete i valori
7 7 7è stato richiesto da un altro utente, ma l'ho rimosso perché non è un set.
rda 0 < r <= max(input)/2, ma invece 0 < r < max(input)perché siamo in grado di ottenere r > max(input)/2i casi semplicemente capovolgendo la sottrazione in r <= max(input)/2casi.
aedbessere lo stesso membro (non necessariamentea ≠ b)?