Die Aufgabe besteht darin, einen nicht trivialen Faktor einer zusammengesetzten Zahl zu finden.
Schreiben Sie Code, der einen nicht trivialen Faktor einer zusammengesetzten Zahl so schnell wie möglich findet, sofern Ihr Code nicht länger als 140 Byte ist. Die Ausgabe sollte nur der gefundene Faktor sein.
Ihr Code kann Eingaben und Ausgaben auf jede beliebige Weise annehmen, einschließlich beispielsweise als Argumente für eine Funktion.
Testfälle, in denen alle Faktoren aufgelistet sind (Sie müssen nur einen ausgeben)
187: 11 17
1679: 23 73
14369648346682547857: 1500450271 9576890767
34747575467581863011: 3628273133 9576890767
52634041113150420921061348357: 2860486313 5463458053 3367900313
82312263010898855308580978867: 264575131106459 311111111111113
205255454905325730631914319249: 2860486313 71755440315342536873
1233457775854251160763811229216063007: 1110111110111 1000000000063 1111111999999
1751952685614616185916001760791655006749: 36413321723440003717 48112959837082048697
Ich werde Ihre Antwort nicht für den folgenden schwierigen Testfall bewerten, der für das Testen von Interesse sein kann:
513231721363284898797712130584280850383: 40206835204840513073 12764787846358441471
Ergebnis
Ihre Punktzahl ist die kombinierte Zeit, um alle oben genannten Testfälle mit einer Strafe von 10 Minuten für jede fehlgeschlagene Faktorisierung zu faktorisieren (alle auf die nächste Sekunde gerundet). Ihr Code sollte auch für andere Ganzzahlen funktionieren, das heißt, Sie sollten diese Antworten nicht nur hartcodieren.
Ich werde Ihren Code nach 10 Minuten stoppen.
Erhalten zwei Personen die gleiche Punktzahl, gewinnt die erste Antwort.
Beschränkungen
Ihr Code kann keine eingebauten oder Bibliotheksfunktionen verwenden, die eine Ganzzahlfaktorisierung durchführen. Sie können davon ausgehen, dass die Eingabe weniger als 256 Bit dauert. Alle Eingabenummern werden zusammengesetzt.
Wie werde ich mal?
Ich werde buchstäblich time ./myprog
auf meinem Ubuntu-System laufen , um das Timing zu erledigen. Geben Sie daher bitte auch ein vollständiges Programm an, das alle von Ihnen definierten Funktionen enthält.
Ein Hinweis für kompilierte Sprachen
Die Kompilierungszeit auf meinem Computer darf nicht länger als 1 Minute dauern.
Ist das überhaupt möglich?
Wenn Sie die Platzbeschränkungen ignorieren, kann jeder in weniger als 2 Sekunden auf meinem Computer mit reinem Python-Code + pypy berücksichtigt werden.
Was ist ein nicht-trivialer Faktorisierungsalgorithmus?
Pollards Rho-Algorithmus ist schnell und eignet sich zum Golfen. Natürlich gibt es auch viele andere Möglichkeiten, eine ganze Zahl zu faktorisieren.
Noch schneller ist das quadratische Sieb . Es sieht nach einer ernsthaften Herausforderung aus, dies in 140 Bytes zusammenzufassen.
Führende Ergebnisse
- SEJPM , 10 Minuten Strafe für den letzten Testfall + 16 Sekunden in Haskell
2
oder 2, 2
?
2 ** 1024
?