Zusammenfassung
Gegeben Eingang k
finden Sie eine Partition von ganzen Zahlen 1
auf n
in k
Summe freie Teilmengen für die größte n
Sie innerhalb von 10 Minuten kann.
Hintergrund: Schurnummern
Eine Menge A
ist summenfrei, wenn ihre Selbstsumme A + A = { x + y | x, y in A}
keine Elemente gemeinsam hat.
Für jede positive Ganzzahl k
gibt es eine größte Ganzzahl S(k)
, sodass die Menge {1, 2, ..., S(k)}
in k
summenfreie Teilmengen aufgeteilt werden kann. Diese Nummer wird die k genannt th Schur Nummer (OEIS A045652 ).
Zum Beispiel S(2) = 4
. Wir können {1, 2, 3, 4}
als partitionieren {1, 4}, {2, 3}
, und das ist die eindeutige Partition in zwei summenfreie Teilmengen, aber wir können jetzt keinem 5
der beiden Teile eine hinzufügen .
Herausforderung
Schreiben Sie ein deterministisches Programm , das Folgendes ausführt:
- Nehmen Sie eine positive ganze Zahl
k
als Eingabe - Schreiben Sie den aktuellen Unix-Zeitstempel in stdout
- Gibt nach jeder Sequenz mit dem aktuellen Unix-Zeitstempel eine Folge von Partitionen von
1
bisn
ink
summenfreie Teilmengen zum Vergrößern ausn
.
Der Gewinner ist das Programm, das n
innerhalb von 10 Minuten nach Eingabe eine Partition für die größte Partition auf meinem Computer druckt 5
. Die Verbindungen werden zum schnellsten Zeitpunkt unterbrochen, um eine Partition für die größte zu finden n
, gemittelt über drei Läufe: Aus diesem Grund sollte die Ausgabe Zeitstempel enthalten.
Wichtige Details:
- Ich habe Ubuntu Precise. Wenn Ihre Sprache nicht unterstützt wird, kann ich sie nicht bewerten.
- Ich habe eine Intel Core2 Quad-CPU. Wenn Sie also Multithreading verwenden möchten, macht es keinen Sinn, mehr als 4 Threads zu verwenden.
- Wenn Sie möchten, dass ich bestimmte Compiler-Flags oder Implementierungen verwende, dokumentieren Sie dies in Ihrer Antwort.
- Sie dürfen Ihren Code für die Eingabe nicht als Sonderfall behandeln
5
. - Sie müssen nicht jede Verbesserung ausgeben, die Sie finden. ZB für die Eingabe können
2
Sie nur die Partition für ausgebenn = 4
. Wenn Sie jedoch in den ersten 10 Minuten nichts ausgeben, werde ich dies als bewertenn = 0
.
n=59
und das Sortieren nach der größten Anzahl zulässiger ZahlennextN
ergibt weniger alsn=64
. Das Sortieren nach der Länge der Liste nicht zugelassener Nummern (die Wiederholungen enthalten kann) führt sehr schnell zu einem elegantenn=30
Muster.