Vamos dar um conjunto de inteiros superior a 1 e chamá-lo de X . Definiremos S (i) como o conjunto de todos os membros de X divisíveis por i onde i> 1 . Gostaria de escolher dentre esses subconjuntos um grupo de conjuntos que
Sua união é o conjunto X
Nenhum elemento de X está em dois dos conjuntos.
Por exemplo, podemos reagrupar {3..11}
como
{3,4,5,6,7,8,9,10,11}
S(3): {3, 6, 9, }
S(4): { 4, 8, }
S(5): { 5, 10, }
S(7): { 7, }
S(11):{ 11}
Alguns conjuntos não podem ser expressos dessa maneira. Por exemplo, se usarmos {3..12}
, 12
é um múltiplo de 3 e 4, impedindo que nossos sets sejam mutuamente exclusivos.
Alguns conjuntos podem ser expressos de várias maneiras, por exemplo, {4..8}
podem ser representados como
{4,5,6,7,8}
S(4): {4, 8}
S(5): { 5, }
S(6): { 6, }
S(7): { 7, }
mas também pode ser representado como
{4,5,6,7,8}
S(2): {4, 6, 8}
S(5): { 5, }
S(7): { 7, }
Tarefa
Nosso objetivo é escrever um programa que terá um conjunto como entrada e produzirá o menor número de subconjuntos que o cobrem dessa maneira. Se não houver, você deve gerar algum valor que não seja um número inteiro positivo (por exemplo 0
).
Esta é uma questão de código-golfe, para que as respostas sejam pontuadas em bytes, com menos bytes sendo melhores.
Testes
{3..11} -> 5
{4..8} -> 3
{22,24,26,30} -> 1
{5} -> 1
[5..5]
? Podemos receber coisas como [8..4]
?
12
é um múltiplo de ambos 3
e 4
impede que nossos sets sejam mutuamente exclusivos ": por quê? Não vejo mais nada na declaração do problema que exija 12
entrar nos dois subconjuntos.
[22,24,26,30]
são todos múltiplos de 2
. Tem certeza de que não seria melhor excluí-lo e colocá-lo na caixa de areia?