Es ist bekannt, dass ungerade Primzahlen im Pascalschen Dreieck genau zweimal vorkommen. Es sind jedoch nicht alle Zahlen, die genau zweimal im Pascalschen Dreieck vorkommen, Primzahlen. Wir werden diese Zahlen Pascal-Primzahlen nennen.
Pascal-Primzahlen sind zusammengesetzte Zahlen, die im Pascal-Dreieck genau zweimal vorkommen. Die ersten paar Pascal-Primzahlen sind
4, 8, 9, 12, 14, 16, 18, ...
Ihre Herausforderung besteht darin, eine positive ganze Zahl n als Eingabe und Ausgabe wahr oder falsch zu nehmen, je nachdem, ob n eine Pascal-Primzahl ist oder nicht. Das ist Code-Golf, also gewinnt das kürzeste Programm!
Antworten:
Wolfram-Sprache (Mathematica) , 45 Bytes
Probieren Sie es online!
Jede zusammengesetzte Zahl n erscheint genau zweimal in Zeile n und kann danach nicht mehr angezeigt werden. Die Bedingung für Pascal-Primzahlen ist also, dass sie in der ersten n-1 überhaupt nicht vorkommen Zeilen überhaupt nicht vorkommen.
Soweit ich das beurteilen kann, ist dies kürzer, als zu überprüfen, ob es in den ersten n Zeilen genau zweimal vorkommt und
!PrimeQ
stattdessen verwendet werden kann.quelle
Python 2 , 93 Bytes
Probieren Sie es online!
Dies ist eine benannte Funktion f , die über einen Exit-Code ausgegeben wird , 0 für Pascal Primes, 1 sonst.
Wie das geht
Dies prüft grundsätzlich, ob n in der ersten n - 1 vorkommt Zeilen des Pascalschen Dreiecks vorkommt oder ob es eine Primzahl ist, und löst einen Fehler aus, wenn eine dieser beiden Bedingungen erfüllt ist.
1 Byte dank ovs gespeichert .
quelle
Jelly ,
11109 BytesDank an:
’
(+1), vermeiden Sie die Verwendung vonn2
(-2), also insgesamt -1.Probieren Sie es online!
Alternativer Ansatz von Jonathan Allan . (fehlerhaft)
Erklärung für die letzte Zeile:
n
zweimal im Pascal-Dreieck auftaucht" gleichbedeutend ist mit "n
nicht in den erstenn-1
Zeilen auftaucht ".true
wenn die Zahl keine Primzahl ist (dhÆP == 0
) und der Zählerc
Null ist. Daraus können wir schließenÆP == c
.Es kann bewiesen werden, dass wenn sie gleich sind, sie gleich 0 sind, weil:
ÆP
Rückgabe eines Booleschen Werts, der nur 0 oder 1 sein kann.n
ist es eine Primzahl, daher kann es nicht in den erstenn-1
Zeilen erscheinen (d. H.c == 0
)quelle
1
ist keine Pascal-Primzahl; das sagt es ist.Ḷc€ḶFċoÆP¬
würde funktionieren, denke ich.ċ=ÆP
sollte arbeiten.Ḷcþ`Fċ=ÆP
sollte auch funktionieren.Haskell ,
8684 BytesProbieren Sie es online!
Erläuterung
Die Funktion
p
definiert rekursiv ein entartetes Pascal-Dreieck:Wie wir sehen können (in dieser Lösung
1
ist es etwas Besonderes),n
erscheint jede Zahl genau zweimal in dern+1
vierten Zeile und alle Elemente der nachfolgenden Zeilen werden nur größer. Daher müssen wir nur überprüfen, obn
sich irgendwo bis zurn
vierten Zeile eine befindet Element ist disqualifiziert:Jetzt haben wir
True
für alle Elemente, die mehr als zweimal vorkommen (außer1
), nur eine fehlerhafteisPrime
Funktion, die zurückgibtTrue
für1
:quelle
APL (Dyalog) ,
44342419 Bytes5 Bytes gespart dank @Cowsquack
Probieren Sie es online!
Wie?
Wir stellen sicher, dass dies auch nicht der Fall ist
⍳
- Reichweite0
..n-1
,⍳∘.!
- Nach kartesischem Binomial mit Selbst⊢∊
- enthaltenn
,⍱
- noch nicht⊢|⍨
-n
Modulo jedes Element von2↓⍳
- Reichweite2
..n-1
~0∊
- nicht enthalten0
(auch bekannt als nicht teilbar)quelle
(∨/1↓1≠⊢∨⍳)∧(~⊢∊⍳∘.!⍳)
ist um zwei Bytes kürzer(0∊⊢|⍨2↓⍳)∧∘~⊢∊⍳∘.!⍳
Für zwei weitere habe ich den Algorithmus für die Primalitätsprüfung geändert~
gibt(~0∊⊢|⍨2↓⍳)⍱⊢∊⍳∘.!⍳
für ein Byte weniger.JavaScript (Node.js) ,
103101 ByteProbieren Sie es online!
quelle
n=>(r=x=>[...Array(n).keys(F=n=>n>0?n*F(n-1):1)].every(x))(i=>r(j=>F(i)/F(j)/F(i-j)-n))>F(n-1)**2%n
threority funktioniert, aber in der Tat für kleine ReichweiteRuby ,
97 bis95 BytesProbieren Sie es online!
Ein paar Bytes abgeschabt.
quelle
R , 55 Bytes
Probieren Sie es online!
sum(!n%%1:n)>2
ist der zusammengesetzte Test undouter(1:n-1,1:n,choose)
berechnet Zeilen0
zun-1
Pascals Dreieck, also stellen wir sicher, dassn
sie dort nicht erscheinen.quelle
05AB1E , 10 Bytes
Probieren Sie es online!
Erläuterung
Überprüft, ob
n
es in den ersten n + 1 Reihen des Pascal-Dreiecks genau zweimal vorkommt und keine Primzahl ist.Der Vergleich funktioniert, da es keine Primzahlen gibt, die dreimal im Dreieck vorkommen können.
quelle
Haskell , 90 Bytes
Probieren Sie es online!
quelle
Pyth , 10 Bytes
Probieren Sie es online! oder überprüfen Sie die Testsuite.
quelle
JavaScript (Node.js) ,
79133130128 ByteProbieren Sie es online!
böser Prim Checker +50 Bytes :(
quelle
Python 2 ,
105104 Bytesdanke an user202729 für -1 byte
Probieren Sie es online!
quelle
p+r
scheint überflüssig zu sein ...