Um conjunto de diferenças cíclicas é um conjunto de números inteiros positivos com uma propriedade exclusiva:
- Let
n
Ser o maior número inteiro no conjunto. - Seja
r
qualquer número inteiro (não necessariamente no conjunto) maior que 0, mas menor ou igual an/2
. - Seja
k
o número de soluções para(b - a) % n = r
ondea
eb
quaisquer membros do conjunto. Cada solução é um par ordenado(a,b)
. (Observe também que esta versão do módulo torna positivos os números negativos, adicionandon
a ele, ao contrário das implementações em muitos idiomas.) - Por fim, se e somente se este for um conjunto de diferenças cíclicas, o valor de
k
não depende da sua escolhar
. Ou seja, todos os valores der
dão o mesmo número de soluções para a congruência acima.
Isso pode ser ilustrado com o seguinte exemplo:
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 r
tem o mesmo número de soluções, 3 neste caso, portanto, este é um conjunto de diferenças cíclicas.
Entrada
A entrada será uma lista de números inteiros positivos. Como essa é uma propriedade definida, assuma que a entrada não está classificada. Você pode assumir que n
é pelo menos 2
, embora k
possa ser zero.
Resultado
Seu programa / função deve gerar um valor verdadeiro se o conjunto for um conjunto de diferenças cíclicas ou um valor falsey de outra forma.
Casos de teste
Conjuntos de diferenças cíclicas 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
( fonte de dados , embora a convenção seja diferente)
Conjuntos de diferenças cíclicas inválidos:
1,2,3,4,20
57,3,5,7,17,35,38,49
3,4,5,9
14,10,8
b
e a
são o mesmo número, (b-a)%n = 0
mas 0 não é um dos valores que você procura por soluções. Portanto, não há uma proibição explícita de que eles sejam o mesmo número, mas eles nunca serão.
7 7 7
fosse uma entrada inválida. Um conjunto não repita valores
7 7 7
foi solicitado por outro usuário, mas eu o removi porque não é um conjunto.
r
por 0 < r <= max(input)/2
, mas em vez disso 0 < r < max(input)
, porque podemos obter r > max(input)/2
casos simplesmente girando a subtração de r <= max(input)/2
casos.
a
eb
é o mesmo membro (não necessariamentea ≠ b
)?