Primes sind überall ...
Sie verstecken sich in Pi
3.141592653 58979 3238 462643 3832 795028841 971693993751
Lassen Sie uns diese Primzahlen bekommen!
Die Herausforderung
Wenn Sie eine Ganzzahl als Eingabe eingeben n>0
, ermitteln Sie, wie viele Primzahlen in den ersten n
Ziffern von verborgen sindPi
Beispiele
Denn n=3
wir sollten nach Primzahlen suchen [3,1,4]
. Es gibt 2 Primes (3,31)
, daher sollte Ihr Code ausgegeben werden. 2
Für n=10
sind die ersten 10 Ziffern [3,1,4,1,5,9,2,6,5,3]
und Ihr Code sollte ausgegeben werden, 12
weil [2, 3, 5, 31, 41, 53, 59, 653, 4159, 14159, 314159, 1592653]
sie ausgeblendet (und gefunden) wurden.
Testfälle
Eingabe -> Ausgabe
1->1
3->2
13->14
22->28
42->60
50->93
150->197
250->363
500->895
Regeln
Ihr Code muss in der Lage sein , alle Primzahlen zu finden. Zumindest fürn=50
Ja, Sie können die ersten 50 Ziffern von Einträgen hartcodieren,Pi
wenn Sie
möchten, sind die Antworten ungültig
Dies ist Code-Golf. Die kürzeste Antwort in Bytes gewinnt!
Antworten:
05AB1E ,
108 Bytes-2 Bytes dank Adnan (
p
vektorisiert)Probieren Sie es online! (Funktioniert bis zu n = 98413, ist aber auch für n = 50 sehr langsam, da so große Zahlen auf Primalität geprüft werden müssen. TIO läuft bei n = 50 nach 60 Sekunden ab.)
Wie?
quelle
<žsþŒÙpO
sollte für 8 Bytes arbeitenp
vektorisiert danke!Mathematica, 76 Bytes
quelle
Tr[1^...]
Das ist eine clevere Methode, um die Länge der Liste zu ermitteln, schön!Mathematica,
1049790 BytesHahahaha, ich habe es geschafft, diese Arbeit zu machen. Ich habe keine Ahnung, wie man Mathematica benutzt. XD
Eingang:
quelle
50 96
Das OP sagt, dass 50 Ziffern 93 Primzahlen enthalten, sodass Sympys Genauigkeit möglicherweise nicht stimmt.Python 3 ,
274237207194189 Bytes-37 Bytes dank Wheat Wizard! -14 Bytes dank Mr.Xcoder.
Codiert die ersten 50 Stellen von pi fest , berechnet aber alles andere manuell.
Probieren Sie es online!
quelle
l=list("31415...)
sollte ~ 40 Zeichen sparen. Und diese Änderung können Siemap(str,i)
mit nur ersetzeni
.len(l)
R,
156123 BytesSuper interessante Lösung. Arbeit an einem richtigen.
33 Bytes dank @Giuseppe eingespart.
R (+ Zahlen und gmp), 198 Bytes
Richtige Lösung. Nimmt
n
als Eingabe.Verwendet
numbers::dropletPi(50)
die ersten 50 Dezimalstellen von Pi zu erzeugen.gsub
Entfernt den Dezimalpunkt.substring
nimmt jede mögliche Teilzeichenfolge (Überraschung Überraschung) von pi bis zun
.Die zurückgegebene Liste wird reduziert und in
gmp
dasbigz
Format von konvertiert. Dieses Format ist erforderlich, um Ganzzahlen der Länge 50 zu speichern. Es werdenunique
die eindeutigen Werte dieses Vektors verwendet. Dieses Ergebnis wird in gespeichertx
.Dann überprüfen wir die Ursprünglichkeit. Dies ist schwierig, da es eine Reihe von Randbemerkungen und Ärgernissen gibt:
Für hoch
n
gibt es ein0
in pi. Dies führt zu Teilzeichenfolgen mit einer führenden Null.as.bigz
erzeugtNA
s mit dem, was entfernt werden muss.In einem ähnlichen Fall
"0"
stürzt die Teilzeichenfolge abgmp::factorize
und muss daher ebenfalls entfernt werden.Für
n=1
,x = 3
. Was an sich in Ordnung ist, aber diebigz
Darstellung von3
iterabel ist,sapply
wird verwirrt und 16 Primzahlen melden. Zu diesem Zweck nehmen wir das Minimum der Länge des Vektorsx
und die Anzahl der darin enthaltenen Primzahlen.gmp::isprime
Ich kann nicht zuverlässig mit den großen Zahlen umgehen. Also verwenden wir stattdessengmp::factorize
und überprüfen, ob die Länge der Ausgabe 1 ist.Insgesamt entfernen wir
0
undNA
vonx
. Wir faktorisieren allesx
und überprüfen die Länge. Wir zählen die Anzahl der Vorkommen von1
und geben die zurückmin(occurences, length(x))
.quelle
cumsum(c(1,1,0,1,1,4,1,0,0,3,0,0,2,7,3,1,0,3,0,0,0,0,0,0,4,1,0,6,0,3,2,0,0,0,0,0,0,4,3,3,6,0,4,8,2,5,3,6,0,5))
anstelle Ihres Vektors für 123 Bytes :)Jelly ,
5932 Bytes-27 Bytes dank Erik dem Outgolfer.
Probieren Sie es online!
Erläuterung
quelle