Manchmal müssen Sie beim Schreiben eines Programms aus irgendeinem Grund eine Primzahl verwenden (z. B. Kryptografie). Ich gehe davon aus, dass Sie manchmal auch eine zusammengesetzte Nummer verwenden müssen. Manchmal muss Ihr Programm, zumindest hier bei PPCG, in der Lage sein, mit willkürlichen Änderungen umzugehen. Und unter Umständen, die für eine interessante PPCG-Frage geeignet sind, müssen möglicherweise sogar die von Ihnen verwendeten Zahlen beständig gegen Korruption sein ...
Definitionen
Eine zusammengesetzte Zahl ist eine Ganzzahl ≥ 4, die keine Primzahl ist, dh sie ist das Produkt von zwei kleineren Ganzzahlen größer als 1. Eine bitflipresistente zusammengesetzte Zahl ist wie folgt definiert: Es ist eine zusammengesetzte positive Ganzzahl, für die Sie sie schreiben in binär in der minimal möglichen Anzahl von Bits können Sie ein oder zwei beliebige Bits von der Zahl ändern, und die Zahl ist immer noch zusammengesetzt.
Beispiel
Betrachten Sie zum Beispiel die Zahl 84. In der Binärdatei ist das 1010100
. Hier sind alle Zahlen, die sich nicht mehr als 2 Bit davon unterscheiden:
0000100 4 2 × 2 0010000 16 4 × 4 0010100 20 4 × 5 0010101 21 3 × 7 0010110 22 2 × 11 0011100 28 4 × 7 0110100 52 4 × 13 1000000 64 8 × 8 1000100 68 4 × 17 1000101 69 3 × 23 1000110 70 7 × 10 1001100 76 4 × 19 1010000 80 8 × 10 1010001 81 9 × 9 1010010 82 2 × 41 1010100 84 7 × 12 1010101 85 5 × 17 1010110 86 2 × 43 1010111 87 3 × 29 1011000 88 8 × 11 1011100 92 4 × 23 1011101 93 3 × 31 1011110 94 2 × 47 1100100 100 10 × 10 1110000 112 8 × 14 1110100 116 4 × 29 1110101 117 9 × 13 1110110 118 2 × 59 1111100 124 4 × 31
Die erste Spalte ist die Zahl in binärer Form; Die zweite Spalte ist die Dezimalzahl. Wie die dritte Spalte angibt, sind alle diese Zahlen zusammengesetzt. Somit ist 84 eine bitflipresistente zusammengesetzte Zahl.
Die Aufgabe
Sie müssen eines der folgenden drei Programme oder Funktionen schreiben, je nachdem, was für Ihre Sprache am sinnvollsten ist:
- Ein Programm oder eine Funktion, die eine nichtnegative Ganzzahl n als Eingabe verwendet und die ersten n bitflipresistenten zusammengesetzten Zahlen ausgibt .
- Ein Programm oder eine Funktion, die eine nichtnegative Ganzzahl n als Eingabe verwendet und alle bitflipresistenten zusammengesetzten Zahlen kleiner als n ausgibt (oder, wenn Sie dies bevorzugen, kleiner oder gleich n , dh Sie können wählen, ob n in der Ausgabe enthalten sein soll, wenn Bitflip verwendet wird -beständig).
- Ein Programm oder eine Funktion, die keine Eingabe akzeptiert und alle bitflipresistenten zusammengesetzten Zahlen ausgibt. (Dies muss einen Ausgabemechanismus verwenden, der in der Lage ist, eine Ausgabe zu erzeugen, während das Programm noch ausgeführt wird, z. B. Drucken auf stdout, eine Lazy List oder einen Generator. Sie können nicht einfach die gesamte Liste berechnen und dann drucken.)
Testfälle
Hier sind die ersten paar bitflipresistenten Composite-Nummern:
84, 184, 246, 252, 324, 342, 424, 468, 588, 636, 664, 670, 712, 730, 934, 958
Klarstellungen
- Es sind nur die Zahlen, die Sie produzieren, die Bitflips widerstehen müssen. Hierbei geht es nicht darum, das Programm so zu gestalten, dass es gegenüber Bitflips resistent ist. Verwenden Sie die von Ihnen gewünschten Zahlen im Programm.
- Die von Ihnen ausgegebenen Zahlen müssen nicht gegen Bitflips in den "führenden Nullen" resistent sein. Stellen Sie sich vor, die Zahlen werden in der kleinstmöglichen Anzahl von Bits gespeichert, und nur diese Bits müssen gegen Umdrehen immun sein. Die ersten 1 Bits der ausgegebenen Zahlen müssen jedoch unempfindlich gegen Bitflips sein.
- Verwenden Sie einen beliebigen Algorithmus, der das richtige Ergebnis liefert. Sie werden hier nicht auf Effizienz bewertet.
- Wenn Sie nachweisen können, dass es endlich viele bitflipresistente zusammengesetzte Zahlen gibt, werden a) die Einschränkungen für das Ausgabeformat aufgehoben und b) die Liste kann hartcodiert werden (obwohl dies wahrscheinlich ausführlicher ist als nur die Berechnung). Diese Regel dient hauptsächlich der Vollständigkeit. Ich erwarte nicht, dass es relevant ist.
Siegbedingung
Das ist Code-Golf , also ist wie immer kürzer besser. Die Länge des Programms wird wie gewohnt in Bytes angegeben.
n
wenn sien
bitflipresistent sind? (dh machen Sie es "kleiner als oder gleich n"?)