Nun, der Bibliothekar hat Sie erwischt, als Sie mit Ihrem Sortieralgorithmus Ihren Job betrogen haben , und jetzt werden Sie bestraft. Sie wurden angewiesen, Code zu erstellen, damit der Bibliothekar das Objekt seiner unerwiderten Zuneigung, den Mathematiklehrer, beeindrucken kann. Das ist also, was "Andere Aufgaben als zugewiesen" bedeutet ...
Jeder kennt die natürliche Zahlenfolge in der Basis 10 mit der Bezeichnung N :
0, 1, 2, 3, 4, 5, 6, ...
Daraus können wir die Primzahlenfolge erzeugen, nennen wir sie P , so dass jedes Element in P genau zwei Teiler in N hat , nämlich 1
und sich selbst. Diese Sequenz ist:
2, 3, 5, 7, 11, 13, ...
OK, bis jetzt ziemlich routinemäßig.
Der Bibliotheks Gedanken einer geschickten Funktion F (x, y) , die eine Zahl nimmt x
von N , mit der Bedingung 0 <= x <= 9
, und eine Anzahl y
von N , und Einsätze x
in y
‚s Dezimaldarstellung in jeder Position (dh das Voranstellen, Einfügen oder Anfügen x
in y
) und gibt dann den sortierten Satz neuer Nummern zurück.
Zum Beispiel würde F (6, 127) ergeben
1267, 1276, 1627, 6127
Das ist aber immer noch langweilig. Die Bibliothekarin will etwas aufzupeppen ein wenig mehr durch , anstatt eine neue Funktion spezifizieren z -> {p : p in P and F(z,p) subset of P}
, aufsteigend sortiert.
Beispielsweise z (7) wäre,
3, 19, 97, 433, 487, 541, ...
denn 37
und 73
sind beide Primzahlen 719
179
und 197
sind alle Primzahlen usw.
Beachten Sie, dass z (2) leer ist, da keine Primzahl, an die ein 2
Anhang angehängt ist, jemals noch eine Primzahl sein wird. Ähnliches gilt für {0,4,5,6,8}.
Ihre Aufgabe ist es, Code zu schreiben, der die ersten 100 Zahlen für ein gegebenes x in der Reihenfolge z (x) generiert und ausgibt .
Eingang
Eine einzelne ganze Zahl x, so dass 0 <= x <= 9
. Die Eingabe kann über ein Funktionsargument, STDIN oder ein Äquivalent erfolgen.
Ausgabe
Eine Folge der ersten 100 Zahlen, die durch Ihre Wahl auf STDOUT oder ein Äquivalent begrenzt sind, sodass die Folge z (x) wie oben beschrieben erfüllt . Wenn z (x) leer ist, wie es für {0,2,4,5,6,8} der Fall ist, Empty Set
sollten stattdessen die Wörter ausgegeben werden.
Beschränkungen
- Dies ist Code-Golf, da Sie dies auf eine Karteikarte übertragen müssen, damit der Bibliothekar dem Mathematiklehrer zeigen kann, und Ihre Hand leicht verkrampft.
- Es gelten die üblichen Lückenbeschränkungen. Der Bibliothekar toleriert keine Betrüger.
Referenzsequenzen
x = 1: A069246
x = 3: A215419
x = 7: A215420
x = 9: A215421
Verwandte Themen: Ermitteln der größten fragilen Primzahl / Ermitteln der kleinsten Primzahl aus einer Teilzeichenfolge / Ermitteln der größten Primzahl, die nach dem Löschen der Ziffern immer noch eine Primzahl ist
"
ist unnötig, aber sehr schöne Arbeit.Python 3, 188 Bytes
Schlecht golfen, aber hier ist etwas fürs Erste. Anstatt dies zu überprüfen
p in P and F(z,p) subset of P
, prüfen wir, obp*f
es sich bei jedem um eine Halbzeit handeltf in F(z,p)
. Kombinieren Sie dies mit einer Testdivision für Primärtests, und Sie erhalten einenO(scary)
Algorithmus.quelle
O(scary)
Perl, 124 Bytes
Erfordert die folgende Befehlszeilenoption:,
-palMntheory=:all
gezählt als 16. Eingabe von stdin.Uses @DanaJ ‚s -
Math::Prime::Util
Modul für Perl (mit dem Pragma geladenntheory
). Erhalten Sie es mit:is_prime
ist für alle Werte kleiner als 2 64 deterministisch , was für unsere Zwecke ausreichend ist.Beispielnutzung
Erwartete Laufzeiten
x = 1 : 1 m 09,2 s
x = 3 : 0 m 04,2 s
x = 7 : 2 m 52,5 s
x = 9 : 0 m 11,5 s
quelle
Pyth, 58
Diese Testsuite berechnet nur die ersten 10 Zahlen, da es viel zu lange dauert, den Rest zu generieren. Brute erzwingt sowohl die Primalität als auch das Einfügen der Ziffern. Zeigt eine so schlechte Leistung, dass ich sie nicht bis zu 100 ausführen konnte. Bitte teilen Sie mir mit, wenn es Probleme gibt.
quelle