Diese Herausforderung ist das erste einer Reihe von Problemen mit den wenigsten Operationen , die in die GOLF-CPU geschrieben werden sollten . Sie können den nächsten finden hier
Eine Partition einer Zahl N
ist eine Liste von Zahlen, die sich zu addieren N
. EIN Primpartition ist eine Liste von Primzahlen, die zusammengerechnet werden N
.
Für diese Herausforderung erhalten Sie eine einzelne Ganzzahl N ≥ 2
. Sie müssen die kürzest mögliche Prim-Partition für generieren N
. Wenn es mehrere mögliche Partitionen gibt, können Sie jede davon drucken.
Beispiele:
9: [2, 7]
12: [5, 7]
95: [89, 3, 3]
337: [337]
1023749: [1023733, 13, 3]
20831531: [20831323, 197, 11]
Ihr Programm sollte in geschrieben sein GOLF-CPU geschrieben sein . Für die Ein- / Ausgabe können Sie entweder STDIO oder die Register verwenden. Die Liste kann in beliebiger Reihenfolge erstellt und bei Verwendung von STDOUT durch Leerzeichen oder Kommas getrennt werden (keine Klammern erforderlich). Offensichtlich ist das Hardcodieren der Lösungen nicht zulässig und auch nicht das Hardcodieren von mehr als den ersten Primzahlen.
Dies ist ein Problem mit den wenigsten Operationen , daher gewinnt die Antwort, die die obigen Beispiele mit der geringsten Anzahl von Zyklen löst!
quelle
Antworten:
159.326.251 Zyklen
Eingegeben wird
n
, ausgegeben wirdr
,s
undt
( unter Vernachlässigung Nullen).Testfälle:
quelle
Gesamtzyklen für Beispiele: 477.918.603
Update 1: Aktualisiert, um Lemoines Vermutung zu verwenden .
Update 2: Aktualisiert, um das Sieb des Eratosthenes zu verwenden, anstatt die Primzahlen naiv zu finden.
Laufen mit:
Beispiellauf:
Zykluszahl zum Beispiel Eingabe:
Wir betrachten die ersten
(N+1)*8
Bytes des Heaps als ein Array mitN+1
64-Bit-Werten. (Da der Heap in der Größe begrenzt ist, funktioniert dies nur fürN < 2^57
). Der Wert des Eintrags beii*8
gibt an , obi
es sich um eine Primzahl handelt:Wenn wir fertig sind, wird das Array so aussehen
[-1, -1, 3, 5, -1, 7, -1, 11, -1, -1, -1, 13, ...]
.Wir nehmen das Sieb des Eratosthenes , um das Array zu erstellen.
Als nächstes macht das Programm folgendes in Pseudocode:
Dies wird aufgrund von Lemoines Vermutung und Goldbachs schwacher Vermutung garantiert funktionieren . Lemoines Vermutung ist noch nicht bewiesen, aber es ist wahrscheinlich wahr für Zahlen unter 2 ^ 57.
quelle