Werfen wir einen Satz von ganzen Zahlen nehmen mehr als 1 und nennen es X . Wir definieren S (i) als die Menge aller durch i teilbaren Elemente von X, wobei i> 1 ist . Möchte aus diesen Teilmengen eine Gruppe von Mengen auswählen, so dass
Ihre Vereinigung ist die Menge X
Kein Element von X befindet sich in zwei der Mengen.
Zum Beispiel können wir uns neu gruppieren {3..11}
als
{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}
Einige Mengen können nicht auf diese Weise ausgedrückt werden. Zum Beispiel, wenn wir nehmen {3..12}
, 12
ist ein Vielfaches von 3 und 4, was verhindert, dass sich unsere Mengen gegenseitig ausschließen.
Einige Mengen können auf mehrere Arten ausgedrückt werden, zum Beispiel {4..8}
als
{4,5,6,7,8}
S(4): {4, 8}
S(5): { 5, }
S(6): { 6, }
S(7): { 7, }
es kann aber auch dargestellt werden als
{4,5,6,7,8}
S(2): {4, 6, 8}
S(5): { 5, }
S(7): { 7, }
Aufgabe
Unser Ziel ist es, ein Programm zu schreiben, das eine Menge als Eingabe verwendet und die kleinste Anzahl von Teilmengen ausgibt, die diese auf diese Weise abdecken. Wenn es keine gibt, sollten Sie einen anderen Wert als eine positive Ganzzahl ausgeben (zum Beispiel 0
).
Dies ist eine Code-Golf- Frage, daher werden die Antworten in Bytes bewertet, wobei weniger Bytes besser sind.
Tests
{3..11} -> 5
{4..8} -> 3
{22,24,26,30} -> 1
{5} -> 1
[5..5]
? Können wir Dinge wie erhalten [8..4]
?
12
Ist ein Vielfaches von beidem 3
und 4
verhindert, dass sich unsere Sets gegenseitig ausschließen ": warum? Ich sehe in der Problemstellung nichts anderes, was es erfordert 12
, in beide Teilmengen zu gehen.
[22,24,26,30]
sind alle ein Vielfaches von 2
. Sind Sie sicher, dass es nicht besser wäre, dies zu löschen und es mit einer Sandbox zu versehen?