Zusammenfassung
Gegeben Eingang kfinden Sie eine Partition von ganzen Zahlen 1auf nin kSumme freie Teilmengen für die größte nSie innerhalb von 10 Minuten kann.
Hintergrund: Schurnummern
Eine Menge Aist summenfrei, wenn ihre Selbstsumme A + A = { x + y | x, y in A}keine Elemente gemeinsam hat.
Für jede positive Ganzzahl kgibt es eine größte Ganzzahl S(k), sodass die Menge {1, 2, ..., S(k)}in ksummenfreie 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 5der beiden Teile eine hinzufügen .
Herausforderung
Schreiben Sie ein deterministisches Programm , das Folgendes ausführt:
- Nehmen Sie eine positive ganze Zahl
kals Eingabe - Schreiben Sie den aktuellen Unix-Zeitstempel in stdout
- Gibt nach jeder Sequenz mit dem aktuellen Unix-Zeitstempel eine Folge von Partitionen von
1bisninksummenfreie Teilmengen zum Vergrößern ausn.
Der Gewinner ist das Programm, das ninnerhalb 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
2Sie nur die Partition für ausgebenn = 4. Wenn Sie jedoch in den ersten 10 Minuten nichts ausgeben, werde ich dies als bewertenn = 0.
n=59und das Sortieren nach der größten Anzahl zulässiger ZahlennextNergibt 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=30Muster.