Die Sequenz
Jeder weiß, dass die einzige gerade Primzahl ist 2
. Ho-hum. Aber es gibt bestimmte gerade Zahlen n
, bei denen sie, wenn sie miteinander verknüpft werden n-1
, zu einer Primzahl werden.
Für den Anfang 1
ist nicht in der Liste, weil 10
nicht Primzahl. Ähnlich mit 2
( 21
) und 3
( 32
). Funktioniert jedoch, 4
weil 43
es sich um eine Primzahl handelt, sodass es die erste Zahl in der Sequenz ist a(1) = 4
. Die nächste Zahl, die funktioniert (weder 6
( 65
) noch 8
( 87
)), ist 10
, weil 109
es Primzahl ist, so a(2) = 10
. Dann überspringen wir einen Haufen mehr, bis 22
, weil 2221
es das Beste ist, also a(3) = 22
. Und so weiter.
Offensichtlich sind alle Ausdrücke in dieser Sequenz gerade, weil jede ungerade Zahl, n
wenn sie mit verknüpft n-1
wird, gerade wird (wie 3
sich in verwandelt 32
), was niemals eine Primzahl sein wird.
Dies ist die Sequenz A054211 in OEIS.
Die Herausforderung
Wenn Sie eine Eingabenummer haben n
, die irgendwo in diese Sequenz passt (dh n
mit einer n-1
Primzahl verkettet ist), geben Sie ihre Position in dieser Sequenz aus. Sie können zwischen 0- und 1-indiziert wählen. Bitte geben Sie in Ihrem Beitrag an, welche.
Regeln
- Es kann davon ausgegangen werden, dass die Eingabe und Ausgabe in den systemeigenen Ganzzahltyp Ihrer Sprache passen.
- Die Ein- und Ausgabe kann in jedem beliebigen Format erfolgen .
- Es ist entweder ein vollständiges Programm oder eine Funktion zulässig. Bei einer Funktion können Sie die Ausgabe zurückgeben, anstatt sie zu drucken.
- Fügen Sie nach Möglichkeit einen Link zu einer Online-Testumgebung hinzu, damit andere Benutzer Ihren Code ausprobieren können!
- Standardlücken sind verboten.
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
Beispiele
Die folgenden Beispiele sind 1-indiziert.
n = 4
1
n = 100
11
n = 420
51
quelle
n
immer die einzige durch teilbare Primzahln
. Es ist nichts Besonderes - so funktionieren Primzahlen.Antworten:
Gelee ,
87 BytesEin monadischer Link, der ein Sequenzmitglied aufnimmt und dessen Index in der Sequenz zurückgibt.
Probieren Sie es online!
Wie?
quelle
zip(head(), pop())
Trick ist wirklich cool. :)Haskell ,
807570 Bytes5 Bytes sparen dank Laikoni
Probieren Sie es online!
quelle
p x=all((>0).mod x)[2..x-1]
der für 1 fehlschlägt, aber dies sollte in diesem Fall keine Rolle spielen.show x++show(x-1)
kann verkürzt werdenshow=<<[x,x-1]
.show
könnte in einer kürzeren Methode gemacht werden, aber ich dachte aus irgendeinem Grund nicht an eine Concat-Karte.Jelly ,
12, 10, 8 BytesProbieren Sie es online!
Dank @ nmjmcman101 werden 1-2 Bytes und dank @Dennis 2 Bytes gespart!
Erläuterung:
quelle
05AB1E ,
987 BytesCode
Verwendet die 05AB1E- Codierung. Probieren Sie es online!
Erläuterung
quelle
'0-1'
es sich um eine Primzahl handelt.Schale ,
131110 Bytes1
indizierte Lösung:Probieren Sie es online!
Ungolfed / Erklärung
Danke @Zgarb für die
-3
Bytes!quelle
£İp
ist äquivalent zuṗ
. Sie können auch ein Byte mit#…ḣ
anstelle von speichern£f…N
.Python 2 , 87 Bytes
-2 Bytes dank @officialaimm . 1-indiziert.
Test Suite.
quelle
Pyth , 12 Bytes
Probieren Sie es online! oder Überprüfen Sie alle Testfälle.
Wie?
quelle
Japt ,
1514121198 Bytes1-indiziert.
Versuch es
quelle
Æ
undÇ
?! Danke, @Oliver; Ich werde aktualisieren, wenn ich wieder an einen Computer komme.2o+X
(mit abschließendem Leerzeichen) würde funktionieren[XXÉ]
, obwohl[]
Ihre Lösung ein Byte kürzer sein wird , wenn ich jemals zu automatischen Ausgleichsklammern komme . (Eigentlich 2, da könntest du dann machenõ_ZÉ]¬nÃèj
)[]
! : DRöda , 73 Bytes
Probieren Sie es online!
1-indiziert. Es verwendet den Stream für die Ein- und Ausgabe.
Erläuterung:
quelle
Pyth , 14 Bytes
Probieren Sie es online!
Erläuterung
quelle
lfTmP_s+`d`tdS
, es ist bedauerlich, dass ich deinen Trick damals nicht alleine gefunden habe :)Perl 6 , 45 Bytes
Probieren Sie es online!
Das
grep
ergibt die Reihenfolge der qualifizierenden Zahlen, dann suchen wir den Schlüssel (:k
) (dh den Index) derfirst
Zahl in der Liste, die dem Eingabeparameter entspricht$_
.quelle
C
9994 Bytes1 indiziert. Es schmerzt mich, Primalitätstests zu schreiben, die so rechenintensiv sind, aber Bytes sind immerhin Bytes.
Wenn wir einige wirklich spröde Sachen zulassen, funktioniert das Kompilieren auf meinem Computer ohne Optimierungen mit GCC 7.1.1 mit den folgenden 94 Bytes (danke @Conor O'Brien )
Ansonsten erledigen diese viel robusteren 99 Bytes die Arbeit
Volles Programm, etwas besser lesbar:
quelle
n=c;
verwendenreturn c;
:i,c,m,k;f(n){c=i=1;for(;++i<n;c+=m==k){for(k=m=1;m*=10,m<i;);for(m=i*m+i-1;++k<m&&m%k;);}n=c;}
JavaScript (ES6),
49 4847 Bytes1-indiziert. Begrenzt durch die Call-Stack-Größe Ihrer Engine.
Probieren Sie es online!
quelle
Mathematica, 77 Bytes
quelle
QBIC , 25 Bytes
Erläuterung
Dies verwendet ein ziemlich kompliziertes mathematisches Ding mit einem Cast-to-String, auf den man für ein gutes Maß geschlagen hat. Wenn eine Version erstellt wird, erfolgt die Verkettung ausschließlich auf Zeichenfolgenbasis und ist ein Byte länger:
quelle
PHP , 203 Bytes
Probieren Sie es online!
Verwendet einen 1-basierten Index für die Ausgabe. TIO Link enthält die lesbare Version des Codes.
quelle
Ruby , 42 + 9 = 51 Bytes
Verwendet die
-rprime -n
Fahnen. 1-indiziert.Zählt alle Zahlen, die der Eingabe entsprechen oder darunter liegen und die die Bedingung erfüllen (oder, technisch gesehen, alle Zahlen, die die
n-1
Bedingung erfüllen ). Da die Eingabe garantiert in der Reihenfolge ist, besteht kein Fehlerrisiko, wenn eine solche zufällige Eingabe7
nicht "primiert" wird.Probieren Sie es online!
quelle
Ruby , 62 Bytes
Probieren Sie es online!
1-indiziert
quelle
Python 2 , 85 Bytes
1-indiziert
Prüfung
Verbesserung der Antwort von Mr. Xcoder
quelle
Java 8, 108 Bytes
0-indiziert
Erläuterung:
Probieren Sie es online aus.
quelle
Stax , 10 Bytes
1- Indiziert
Ausführen und Debuggen es Erklärung
quelle
Ordentlich , 33 Bytes
Probieren Sie es online!
Erläuterung
Die Grundidee ist, eine Folge der gültigen Zahlen zu erstellen und dann eine Curry-Indexfunktion zurückzugeben.
quelle