Vamos a echar un conjunto de números enteros mayores que 1 y lo llaman X . Definiremos S (i) como el conjunto de todos los miembros de X divisible por i donde i> 1 . Me gustaría elegir de estos subconjuntos un grupo de conjuntos de manera que
Su unión es el conjunto X
Ningún elemento de X está en dos de los conjuntos.
Por ejemplo, podemos reagruparnos {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}
Algunos conjuntos no se pueden expresar de esta manera. Por ejemplo, si tomamos {3..12}, 12es un múltiplo de 3 y 4 que impide que nuestros conjuntos sean mutuamente excluyentes.
Algunos conjuntos se pueden expresar de múltiples maneras, por ejemplo, {4..8}se pueden representar como
{4,5,6,7,8}
S(4): {4, 8}
S(5): { 5, }
S(6): { 6, }
S(7): { 7, }
pero también se puede representar como
{4,5,6,7,8}
S(2): {4, 6, 8}
S(5): { 5, }
S(7): { 7, }
Tarea
Nuestro objetivo es escribir un programa que tome un conjunto como entrada y salida con el menor número de subconjuntos que lo cubren de esta manera. Si no hay ninguno, debe generar algún valor que no sea un entero positivo (por ejemplo 0).
Esta es una pregunta de código de golf , por lo que las respuestas se puntuarán en bytes, con menos bytes mejor.
Pruebas
{3..11} -> 5
{4..8} -> 3
{22,24,26,30} -> 1
{5} -> 1
[5..5]? ¿Podemos recibir cosas como [8..4]?
12es un múltiplo de ambos 3y 4evita que nuestros sets sean mutuamente excluyentes ": ¿por qué? No veo nada más en la declaración del problema que requiera 12entrar en ambos subconjuntos.
[22,24,26,30]son todas múltiplos de 2. ¿Estás seguro de que no sería mejor eliminar esto y ponerlo a prueba?