Die arithmetische Folge der Primzahlen des verrückten Bibliothekars

18

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 1und 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 xvon N , mit der Bedingung 0 <= x <= 9, und eine Anzahl yvon N , und Einsätze xin y‚s Dezimaldarstellung in jeder Position (dh das Voranstellen, Einfügen oder Anfügen xin 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 37und 73sind beide Primzahlen 719 179und 197sind alle Primzahlen usw.

Beachten Sie, dass z (2) leer ist, da keine Primzahl, an die ein 2Anhang 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 Setsollten 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

AdmBorkBork
quelle

Antworten:

5

Pyth, 49 Bytes

Wie bei Python3 und anderen Pyth-Antworten ist die Laufzeit zum Auffinden von 100 Zahlen unerschwinglich. (Testsuite ergibt 10)

?}z"1379".f&!tPZ!|FmtPvjzc`Z]dhl`Z*TT3"Empty Set"

Probieren Sie es online aus

Brian Tuck
quelle
1
Das Nachziehen "ist unnötig, aber sehr schöne Arbeit.
FryAmTheEggman
Danke für die Erinnerung. Da EOL eine Zeichenfolge nicht mehr terminiert, habe ich nicht terminierte Zeichenfolgen vermieden, aber natürlich funktioniert EOF immer noch
Brian Tuck
4

Python 3, 188 Bytes

x=input()
k=1
i=100
if x in"024568":i=print("Empty Set")
while i:k+=1;s=str(k);i-=all(sum(p%d<1for d in range(2,p))<4for p in[k*int(s[:j]+x+s[j:])for j in range(len(s)+1)])and not print(k)

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, ob p*fes sich bei jedem um eine Halbzeit handelt f in F(z,p). Kombinieren Sie dies mit einer Testdivision für Primärtests, und Sie erhalten einen O(scary)Algorithmus.

Sp3000
quelle
+1 fürO(scary)
AdmBorkBork
1
Netter Trick, um i auf None zu setzen.
Lirtosiast
3

Perl, 124 Bytes

$p=prime_iterator;y/1379//or$i=+~print'Empty Set'}while($i<100){$_=&$p;is_prime"$`@F$'"or redo while//g;$i++

Erfordert die folgende Befehlszeilenoption:, -palMntheory=:allgezählt als 16. Eingabe von stdin.

Uses @DanaJ ‚s - Math::Prime::UtilModul für Perl (mit dem Pragma geladen ntheory). Erhalten Sie es mit:

cpan install Math::Prime::Util
cpan install Math::Prime::Util::GMP

is_primeist für alle Werte kleiner als 2 64 deterministisch , was für unsere Zwecke ausreichend ist.


Beispielnutzung

$ echo 2|perl -palMntheory=:all oscary.pl
Empty Set

$ echo 7|perl -palMntheory=:all oscary.pl
3
19
97
433
487
541
691
757
853
1471
.
.
.
718705783
720574573
737773357
745157779
747215167
767717017
768743377
770294977
771778477
774577777

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

primo
quelle
1

Pyth, 58

L}bPb|*"Empty Set"}Qj204568T.f&yZ.Amyi++<JjZTdQ>JdThl`Z100

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.

FryAmTheEggman
quelle