Consente di prendere una serie di numeri interi maggiori di 1 e lo chiamano X . Definiremo S (i) come l'insieme di tutti i membri di X divisibili per i dove i> 1 . Vorrei scegliere tra questi sottogruppi un gruppo di insiemi tale che
La loro unione è l'insieme X
Nessun elemento di X è in due dei set.
Ad esempio possiamo raggruppare {3..11}come
{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}
Alcuni set non possono essere espressi in questo modo. Ad esempio, se prendiamo {3..12}, 12è un multiplo di 3 e 4 che impedisce ai nostri set di escludersi a vicenda.
Alcuni insiemi possono essere espressi in più modi, ad esempio {4..8}possono essere rappresentati come
{4,5,6,7,8}
S(4): {4, 8}
S(5): { 5, }
S(6): { 6, }
S(7): { 7, }
ma può anche essere rappresentato come
{4,5,6,7,8}
S(2): {4, 6, 8}
S(5): { 5, }
S(7): { 7, }
Compito
Il nostro obiettivo è scrivere un programma che prenderà un set come input e produca il minor numero di sottoinsiemi che lo coprono in questo modo. Se non ce ne sono, dovresti generare un valore diverso da un numero intero positivo (ad esempio 0).
Questa è una domanda di code-golf, quindi le risposte verranno classificate in byte, con meno byte migliori.
test
{3..11} -> 5
{4..8} -> 3
{22,24,26,30} -> 1
{5} -> 1
[5..5]? Possiamo ricevere cose come [8..4]?
12è un multiplo di entrambi 3e 4impedisce ai nostri set di escludersi a vicenda ": perché? Non vedo nient'altro nella dichiarazione del problema che richiede 12di andare in entrambi i sottoinsiemi.
[22,24,26,30]sono tutti multipli di 2. Sei sicuro che non sarebbe meglio eliminare questo e sandbox?