Eine Zahl ist eine Chen-Primzahl, wenn sie zwei Bedingungen erfüllt:
- Es ist an sich Prime
- Selbst plus zwei ist entweder eine Primzahl oder eine Halbprimzahl.
Eine Primzahl ist eine Zahl, bei der genau zwei Teiler vorhanden sind und diese Teiler aus sich selbst und einem Teiler bestehen.
Eine Semi-Primzahl ist eine Zahl, die aus zwei Primzahlen besteht. (Beachten Sie, dass 12 = 2 * 2 * 3 kein Semi-Prime ist, sondern 25 = 5 * 5).
Ihre Aufgabe ist es, festzustellen, ob eine Zahl eine Chen-Primzahl ist. Sie sollten einen Wahrheitswert für yes und einen falschen Wert für no ausgeben.
Die Eingabe ist eine ganze Zahl größer oder gleich eins. Es kann auch als Zeichenfolge, Zeichenarray oder Array oder Ziffern verwendet werden.
Beispiele:
101 -> truthy
223 -> falsy
233 -> truthy
1 -> falsy
Dies ist OEIS A109611 .
Dies ist zum Teil inspiriert von Bin ich eine Sophie Germain Prime? was leider als Duplikat geschlossen wurde, also poste ich eine etwas verwandte Herausforderung, die kein Duplikat ist.
True
für Wahres und /2
oderFalse
Falsches (inkonsistente falsche Werte) zurückkehren?2 * 2 * 2 * 3 * 3
ein Semi-Prime? Was ist5 * 5
?5*5
ist semi-prime,2*2*2*3*3
ist es nicht. Ich sagte genau zwei.2*2*2*3*3
es genau zwei Primfaktoren gibt, nämlich2
und3
, und dass5*5
es einen Primfaktor gibt, nämlich5
.) Vielleicht könnten Sie das in die Frage einarbeiten?Antworten:
Brachylog , 7 Bytes
Probieren Sie es online!
Erläuterung
quelle
05AB1E , 8 Bytes
Probieren Sie es online!
Erläuterung
quelle
ArnoldC , 1339 Bytes
Probieren Sie es online!
(Dies ist mein erster Beitrag auf codegolf.SE, bitte lassen Sie mich wissen, wenn dies falsch formatiert ist. Ich stelle fest, dass diese Byteanzahl nicht wettbewerbsfähig ist, dies ist nur zum Spaß.)
quelle
Gelee , 10 Bytes
Probieren Sie es online!
quelle
Pyth, 10 Bytes
Probieren Sie es online!
Wie?
quelle
Python mit Sympy ,
6956 Bytes-13 bytes dank alephalpha (durch upgraden auf sympy 1.1 und
primeomega(n+2)
ersetzen mitsum(factorint(n+2).values())
)... Übernahme von Gryphons gelöschtem Beitrag.
Eine unbenannte Funktion, die
True
für Chen-Primzahlen undFalse
andere zurückgegeben wird.Zählt die Faktoren,
n+2
indem die Multiplikationen des Primfaktors summiert werden.Beachten Sie, dass vor dem Vergleich eine
3
Multiplikation mit erfolgt. Wenn der Code nicht mit Primzahlen versehen ist , wird geprüft, ob er weniger als Faktoren enthält (immer ergibt ), und bei Primzahlen wird geprüft, ob es sich um Primzahlen oder Halbprimzahlen handelt.isprime(n)
<
n
n+2
0
False
n
n+2
quelle
3*isprime(n)
Trick ist, wonach ich gesucht habe, um die bedingte Anweisung zu bereinigen.Pari / GP , 29 Bytes
Der
3*isprime(n)
Trick wird Jonathan Allans Antwort gestohlen .Probieren Sie es online!
quelle
Java 8,
858483 Bytes-1 Bytes dank @ OlivierGrégoire mit einem iterativen Ansatz anstelle von rekursiv.
Erläuterung:
Probieren Sie es hier aus.
quelle
n->{int N=n+2,f=0,F=0,d=1;for(;d++<n;f+=n%d<1?1:0)F+=N%d<1?1:0;return n>1&f<2&F<3;}
.Mathematica, 28 Bytes
quelle
JavaScript (ES6),
6361 BytesDefiniert eine Funktion
f
, dien
als Argument verwendet und das Ergebnis zurückgibt. Ich bin sehr zufrieden mitg
dem Ergebnis. es zählt die Anzahl der Primfaktoren in einer Zahl.2 Bytes sparen dank Kevin Cruijsens
&
Trick.Ungolfed
quelle
&&
zu&
? Seit 0/1 gibt es auch in JS Wahrheits / Falschwerte?|
und&
nicht kurzschließen, das könnte noch mehr Bytes einspareng
.Japt ,
2220191312 BytesProbier es aus
quelle
PHP, 64 Bytes
druckt
0
für wahr, andere ganze Zahlen für falsch. Laufen Sie als Pipe mit-nR
oder versuchen Sie es online .Nervenzusammenbruch
konsistenter falscher Wert, 65 Bytes:
druckt
1
für wahr und0
für falsch.quelle
Python 3 mit SymPy,
7371 BytesProbieren Sie es online!
Dies ist eine weiter fortgeschrittene Version einer Antwort, die hier früher gepostet wurde, aber sie scheint gelöscht worden zu sein.
Vielen Dank an @ JonathanAllan für das Speichern von 2 Bytes!
quelle
f=
, das Erstellen einer unbenannten Funktion für Code-Golf in Ordnung ist.PHP , 87 Bytes
Probieren Sie es online!
PHP , 87 Bytes
Probieren Sie es online!
quelle
APL NARS, 23 Zeichen
Hier gibt π⍵ die Reihe von Faktoren von ⍵ zurück, die sich von 1 unterscheiden; ein Test:
quelle
Regex (ECMAScript), 31 Byte
Probieren Sie es online! (zeigt alle Chen-Primzahlen ≤ 1000)
Bei einer Folge von n
x
s stimmt dieser reguläre Ausdruck genau dann überein, wenn n eine Chen-Primzahl ist.Es wird behauptet, dass n größer als 2 ist und dass die Zeichenfolge nicht die Form hat.
((xx+)(\2(xx))*)(\1\4)+
Dieser reguläre Ausdruck hat zwei Bedeutungen, je nachdem, wie oft er
(\2(xx))
wiederholt wird.Wenn es 0-mal wiederholt wird, kann der reguläre Ausdruck vereinfacht werden
(xx+)\1+
, was mit zusammengesetzten Zahlen übereinstimmt.Wenn es eine positive Anzahl von Malen wiederholt wird, entspricht der reguläre Ausdruck
((xx+)(\2xx)+)(\1xx)+
Dieser reguläre Ausdruck bedarf einiger Erklärungen, ich werde jedoch nur einen kleinen Einblick gewähren.
Wenn Sie durch die Algebra gehen, finden Sie, dass
((xx+)(\2xx)+)(\1xx)+
Zahlen der Forma*b*c-2
wo übereinstimmena≥4,b≥2,c≥2
.Es wird also (fast) passen, wenn n +2 mehr als 2 Primfaktoren hat. (dh weder Primzahl noch Semi-Primzahl)
Beachten Sie, dass es nicht mit 6, 16 oder 25 übereinstimmt, aber dass dies keine Rolle spielt, da sie alle zusammengesetzt sind.
Also
(?!((xx+)(\2(xx))*)(\1\4)+$)
wird passen, solange n nicht zusammengesetzt ist und n +2 entweder Prim oder Semi-Prim ist.Leider enthält dies 1 (und 0), so dass wir dann überprüfen, dass n mindestens 2 mit ist
xx
Ein paar verschiedene "31-Bytes" sind:
quelle
Ruby ,
4941 BytesProbieren Sie es online!
Danke H.PWiz für -8 Bytes
Wie?
Holen Sie sich als erstes eine Folge von
'l'
n + 2-mal wiederholt. Wenden Sie dann einen regulären Ausdruck an, um zu überprüfen, ob:(.?)(..)
((..+)\1)(..)
((..+)\2)\1+
Die 2 regulären Ausdrücke erzeugen einen vierten Fall, der keinen Sinn ergibt und ignoriert werden
(.?)\2+
kann:, der sich in eine leere Zeichenfolge oder ein einzelnes Zeichen auflöst, weil\2
es leer ist.quelle
|
näher zusammen:^((..+)\2+)(\1+|..)$
. Auch ein guter Zufall, dass Sie dieses Problem mit Regex zu einer ähnlichen Zeit wie ich versucht haben :).
anstelle von verwenden können,.?
da die Eingabe immer mindestens 1 istJulia, 59 Bytes
quelle
Pyt , 11 Bytes
3 * isprime (x) wurde Jonathan Allans Antwort gestohlen
quelle
Haskell , 163 Bytes
Probieren Sie es online!
quelle