Die Frage
Eine Sophie Germain-Primzahl ist eine Primzahl p, so dass 2p + 1 ebenfalls eine Primzahl ist. Zum Beispiel ist 11 eine Sophie Germain-Primzahl, weil 23 auch eine Primzahl ist. Schreiben Sie das kürzeste Programm, um die Primzahlen von Sophie Germain in aufsteigender Reihenfolge zu berechnen
Regeln
- Die Sophie Germain-Primzahlen müssen von Ihrem Programm generiert werden , nicht von einer externen Quelle.
- Ihr Programm muss alle Sophie Germain-Primzahlen unter 2³²-1 berechnen
- Sie müssen jede einzelne Sophie Germain-Primzahl drucken, die Ihr Programm findet.
- Die Person mit der niedrigsten Punktzahl gewinnt
Wertung
- 2 Punkte pro Byte Ihres Codes
- -10, wenn Sie eine von Ihrem Programm erzeugte Primzahl größer als 2³²-1 anzeigen können
code-challenge
primes
Miau Mix
quelle
quelle
Antworten:
CJam
Für 17 Zeichen erhalten wir eine vollständige Aufzählung bis zu 2 ^ 32:
Für 4 Zeichen mehr erhalten wir einen Bereich, der gerade groß genug ist, um eine SG-Primzahl größer als 2 ^ 32 aufzunehmen:
seit 4294967681 = 2 ^ 32 + 385 <2 ^ 32 + 400.
Natürlich können wir die Reichweite ebenso kostenlos erweitern wie
quelle
I,
behandelt ,I
als 32-Bit - Ganzzahl signiert, so dass der maximale Wert fürI
ist2 ** 31 - 1
.Pyth, 19 Bytes * 2 - 10 = 28
Beachten Sie, dass der Online-Compiler / Executor keine Ausgabe anzeigt, da es sich um eine Endlosschleife handelt.
Erklärt:
quelle
PZ
gibt keinen wahrheitsgemäßen oder falschen Wert zurück. Es gibt die Primfaktorisierung von zurückZ
. Beim Testen auf Primzahl wird!tPZ
geprüft, ob die Primfaktorisierung nur einen Faktor enthält.!tP
Fehler0
und1
Primzahl zu sein, da ihre Primfaktorisierung nur 1 Faktor enthält. Einfache Lösung besteht darin, alleZ
durch zu ersetzenK
undK2
zu Beginn zuzuweisen .K1
statt zuK2
und tauschen Sie das Wenn und das Inkrement aus. Auf diese Weise können Sie die entfernen)
. Und+1*K2
ist das gleiche wiehyK
.Pyth - 2 * 16 Bytes - 10 = 22
Verwendet die übliche Methode der Primprüfung in Pyth mit
!tP
und wendet sie sowohl auf die Zahl als auch auf die sichere Primzahl an, mit einem kleinen Trick, um beide gleichzeitig zu prüfen. Geht auf10^10
, also gehe ich für den Bonus.Erklärung in Kürze.Versuchen Sie es unter 1000 online .
quelle
quelle
CJam, 34 (2 * 22-10)
Druckt alle Primzahlen von Sophie Germain unter
12 ** 9
, einschließlich4294967681 > 2 ** 32
.Ich schätze, dass dies auf meiner Maschine ungefähr 8 Stunden dauern wird. Ich werde es heute Abend laufen lassen.
quelle
Haskell, 2 * 54-10 = 98
132i
ist ein Prime Check.p
nimmt alle Zahlen, bein
denen beiden
und2*x+1
Primzahlen sind.p
ist eine unendliche Liste.Bearbeiten: Besserer Weg, um zu überprüfen, ob
2*n+1
Prime ist.quelle
Julia, 2 * 49 - 10 = 88
Druckt sie im Listenformat
[2,3,5,11,...]
. Wenn dieses Format, die Verwendung derprimes
Funktion oder das Warten, bis die gesamte Berechnung zum Drucken abgeschlossen ist, nicht akzeptabel ist, werden sie während der Ausführung einmal pro Zeile gedruckt.Es ist etwas länger, 52 Zeichen. Beide berechnen alle Primzahlen von Sophie Germain bis zu
2^33
, daher sollten sie den 10-Punkte-Rabatt erhalten.quelle
Python 3,
124123 BytesWie funktioniert es?
Probieren Sie es hier online aus .
Mein Computer sagt, dass er 0,023283% aller Sophie Germain-Primzahlen unter 2 ^ 32 erzeugt hat.
Wenn es fertig ist, werde ich es auf Pastebin posten, wenn es genügend Zeilen gibt. Sie können damit überprüfen, ob Sie alle haben.
quelle
.5
ist kürzer als0.5
Perl, 2 * 57-10 = 104
42 Sekunden bis 2 ^ 32, 1m26s bis 2 ^ 33. Läuft 50% schneller, wenn
2*$_+1
geschrieben als,1+$_<<1
aber das ist ein weiteres Byte.Das Modul wird auch installiert
primes.pl
und verfügt über viele Filter, darunter einen für Sophie-Germain-Primzahlen. Also:primes.pl --so 2**33
(20 Bytes)quelle
Ruby, 61 * 2 - 10 = 112
Es würde ewig dauern, alle Werte bis zu 2 ** 32 auszudrucken
Bearbeiten
Einige Bytes wurden entfernt, wobei 1.0 / 0 durch Float :: INFINITY ersetzt wurde
quelle
PARI / GP, 46 * 2 - 10 = 82
quelle