Ich bin 2/3 Zwillinge mit meinem Bruder, dh am selben Tag im selben Monat, aber zwölf Jahre später geboren. Als ich 5 war, war er 17, beide Primzahlen; Das letzte Zeitalter, auf das wir uns verlassen können, ist [71, 83], da wir beide am Leben sind und in der Lage sind, dieses zufällige Jubiläum zu feiern.
Aufgabe
Erstellen Sie einen Code, der
Nimmt zwei Ganzzahlen als Eingabe: die Differenz zwischen dem Zähler und dem "Zwilling" als positive Ganzzahl k (na ja, ich bin die jüngere) und die Obergrenze als positive Ganzzahl u (Laufzeitüberlegung)
und gibt als Array oder Liste alle i Zahlen kleiner oder gleich u aus, für die sowohl i als auch i + k Primzahlen sind. Die Ausgabe muss nicht sortiert werden.
Testfälle
12, 1000 -> [5, 7, 11, 17, 19, 29, 31, 41, 47, 59, 61, 67, 71, 89, 97, 101, 127, 137, 139, 151, 167, 179, 181, 199, 211, 227, 229, 239, 251, 257, 269, 271, 281, 337, 347, 367, 389, 397, 409, 419, 421, 431, 449, 467, 479, 487, 491, 509, 557, 587, 601, 607, 619, 631, 641, 647, 661, 727, 739, 757, 761, 797, 809, 811, 827, 907, 929, 941, 971, 997]
2, 999 -> [3, 5, 11, 17, 29, 41, 59, 71, 101, 107, 137, 149, 179, 191, 197, 227, 239, 269, 281, 311, 347, 419, 431, 461, 521, 569, 599, 617, 641, 659, 809, 821, 827, 857, 881]
3, 1500 -> [2]
30, 1500 -> [7, 11, 13, 17, 23, 29, 31, 37, 41, 43, 53, 59, 67, 71, 73, 79, 83, 97, 101, 107, 109, 127, 137, 149, 151, 163, 167, 181, 193, 197, 199, 211, 227, 233, 239, 241, 251, 263, 277, 281, 283, 307, 317, 337, 349, 353, 359, 367, 379, 389, 401, 409, 419, 431, 433, 449, 457, 461, 479, 491, 541, 547, 557, 563, 569, 571, 577, 587, 601, 613, 617, 631, 643, 647, 653, 661, 709, 727, 739, 743, 757, 797, 809, 823, 827, 829, 853, 857, 877, 881, 907, 911, 937, 941, 947, 953, 967, 983, 991, 1009, 1019, 1021, 1031, 1033, 1039, 1061, 1063, 1087, 1093, 1123, 1151, 1163, 1171, 1187, 1193, 1201, 1229, 1249, 1259, 1277, 1289, 1291, 1297, 1399, 1409, 1423, 1429, 1451, 1453, 1459, 1481, 1493]
Bearbeiten
Da ich die Obergrenze nicht angegeben habe, sind sowohl inklusive als auch exklusive Lösungen willkommen.
Edit Nr. 2
Die Challenge endet am 1. September, eine Woche nach dem Start.
Sieht so aus, als hätten wir einen Gewinner, aber im Falle eines Unentschieden ist der Unentschieden beliebt. in diesem Fall wird die "Sekunde" durch Kopfgeld ausgeglichen.
Antworten:
Gelee,
87 BytesProbieren Sie es online!
Erläuterung
quelle
Brachylog ,
2723 BytesProbieren Sie es online!
Überprüfen Sie alle Testfälle.
Prädikat 0 (Hauptprädikat)
Prädikat 1 (Hilfsprädikat)
quelle
05AB1E , 9 Bytes
Code:
Verwendet die CP-1252- Codierung. Probieren Sie es online! .
quelle
Pyke, 10 Bytes
Probieren Sie es hier aus!
Auch 10 Bytes:
Probieren Sie es hier aus!
quelle
Oktave,
3433 Bytesquelle
MATL , 8 Bytes
Dank an @alephalpha für seinen Ansatz , der mir dabei geholfen hat, 3 Bytes zu sparen
Probieren Sie es online!
quelle
Python 3,
1149290 BytesDanke an @Dennis für -2 Bytes
Eine Funktion, die Eingaben über Argumente entgegennimmt und eine unsortierte Menge zurückgibt. Dies gilt ausschließlich für die obere Schranke.
Dies verwendet die Methode in @ xnor Antwort hier Primzahlen zu finden.
Probieren Sie es auf Ideone
Wie es funktioniert
Prime finden
Wir initialisieren zuerst einen Testwert
i
und ein ProduktP
als1
und eine Liste von Primzahlenl
als den Satz, der enthält0
. Dann wird einewhile
Schleife ausgeführt, die alle Wertei
im Bereich[1, u+k-1]
auf Primalität prüft . Die Idee ist, dass durch MultiplizierenP
miti^2
am Ende jeder IterationP
der Wert(i-1)!^2
während des Testens genommen wirdi
, dh das Produkt der ganzen Zahlen zum[1, i+1]
Quadrat. Der eigentliche Primalitätstest wird dann durch Berechnen durchgeführtP mod i
; Wenn dies null ergibt ,i
kann es keine Primzahl sein, da dies impliziert, dassi
es durch mindestens einen der Werte teilbar ist, aus denen das Produkt besteht. Wenn dies zurückkommt1
, danni
muss eine Primzahl sein, da sie nicht durch einen der Werte im Produkt teilbar ist. Wenni
prime ist, wird es angehängtl
und wenn nicht,0
wird es angehängt. Das Quadrieren des Produkts verhindert eine falsche Identifizierung4
als Primzahl und ist hier nützlich, da es garantiert, dass nur0
oder zurückgegeben1
wird, sodass die Auswahl des anzuhängenden Werts durch einfaches Multiplizieren des Ergebnisses mit vorgenommen werden kanni
.Identifizierung von 'Zwillings'-Primzahlen
Wir erstellen jetzt eine weitere Menge, die alle Elemente von
l-k
element-weise enthält. Der Schnittpunkt dieser Mengel
wird dann mit ermittelt&
, wodurch eine Menge übrig bleibt, die nur die Elemente enthält, die beiden Mengen gemeinsam sind. Eine Zahli
ist nur in beiden Sätzen vorhanden, wenn beidei
undi+k
Primzahlen sind. Dies bedeutet, dass die gewünschte Ausgabe erhalten bleibt. Wennk
es sich jedoch um eine Primzahl handelt,0
ist es in beiden Sätzen vorhanden, was bedeutet, dass diese vor der Rücksendung entfernt werden muss.quelle
k,u=input();i=P=1;l={0};exec'l|={P%i*i};P*=i*i;i+=1;'*(u+k);print{i-k for i in l}&l
Funktioniert in Python 2 für 83 Bytes. Selbst in 3 sollte das Erstellen einer Menge auf diese Weise einige Bytes einsparen.0
aus dem letzten Satz, denn wenn einek
Primzahl ist, dies wird fälschlicherweise zurückgegeben .R, 98 Bytes
Ungolfed:
quelle
CJam, 17 Bytes
Entweder als volles Programm:
Probieren Sie es online!
Oder als unbenannter Block:
Probieren Sie es online!
quelle
Java 7,
185175 BytesUngolfed & Testcode:
Probieren Sie es hier aus.
Ausgabe:
quelle
PARI / GP, 39 Bytes
quelle
Mathematica, 43 Bytes
Generieren Sie alle Primzahlen, die kleiner oder gleich der Obergrenze sind. Addieren Sie den Altersunterschied zum Ergebnis. Wählen Sie Primzahlen aus. Subtrahieren Sie die Altersdifferenz zum Ergebnis.
quelle
Schnell, 142 Bytes
quelle
Perl 6 ,
3937 BytesErläuterung:
quelle
SILOS , 205 Bytes
Probieren Sie es online!
Primalitätstest nach Wilsons Theorem .
quelle
Eigentlich 12 Bytes
Eingabe ist
u
dannk
. Golfvorschläge sind willkommen. Probieren Sie es online!Ungolfing:
quelle
R, 104 Bytes
Im Gegensatz zu der anderen R-Lösung, die veröffentlicht wurde, bezieht sich diese auf stdin.
Ungolfed:
quelle
Javascript (ES6),
90838075 BytesBeispiel:
quelle
Pyth, 13 Bytes
Ein Programm, das eine Liste des Formulars
[k, u]
eingibt und eine Liste druckt.Probieren Sie es online aus
Wie es funktioniert
quelle