Un set di differenze cicliche è un set di numeri interi positivi con una proprietà unica:
- Lascia che
n
sia il numero intero più grande nel set. - Sia
r
qualsiasi numero intero (non necessariamente nell'insieme) maggiore di 0 ma minore o uguale an/2
. - Sia
k
il numero di soluzioni per(b - a) % n = r
dovea
e perb
ogni 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
k
non dipende dalla scelta dell'utenter
. Cioè, tutti i valori dir
danno 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 r
ha 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 n
sia almeno 2
, sebbene k
possa 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
b
e a
hanno 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 7
fosse 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.
r
da 0 < r <= max(input)/2
, ma invece 0 < r < max(input)
perché siamo in grado di ottenere r > max(input)/2
i casi semplicemente capovolgendo la sottrazione in r <= max(input)/2
casi.
a
edb
essere lo stesso membro (non necessariamentea ≠ b
)?