Il est bien connu que les nombres premiers impairs apparaîtront exactement deux fois dans le triangle de Pascal. Cependant, tous les nombres qui apparaissent exactement deux fois dans le triangle de Pascal ne sont pas premiers. Nous appellerons ces nombres Pascal premiers.
Les nombres premiers Pascal sont des nombres composites qui apparaissent exactement deux fois dans le triangle de Pascal. Les premiers nombres premiers Pascal sont
4, 8, 9, 12, 14, 16, 18, ...
Votre défi est de prendre un entier positif n comme entrée et sortie vrai ou faux, selon que n est un nombre premier Pascal ou non. C'est du golf de code, donc le programme le plus court gagne!
Réponses:
Wolfram Language (Mathematica) , 45 octets
Essayez-le en ligne!
Chaque nombre composé n apparaît exactement deux fois sur la ligne n et ne peut pas apparaître par la suite. Donc, la condition pour les nombres premiers Pascal est qu'ils n'apparaissent pas du tout dans les n-1 premières lignes.
Pour autant que je sache, c'est plus court que de vérifier qu'il apparaît exactement deux fois dans les n premières lignes et de pouvoir l'utiliser à la
!PrimeQ
place.la source
Python 2 , 93 octets
Essayez-le en ligne!
Il s'agit d'une fonction nommée f , qui sort via le code de sortie , 0 pour Pascal Primes, 1 sinon.
Comment ça marche?
Cela vérifie essentiellement si n se produit dans les n - 1 premières lignes du triangle de Pascal ou s'il est premier, et renvoie une erreur si l'une de ces deux conditions est remplie.
Sauvegardé 1 octet grâce aux ovs .
la source
Gelée ,
11109 octetsGrâce à:
’
(+1) évitez d'utilisern2
(-2), donc -1 dans l'ensemble.Essayez-le en ligne!
Approche alternative , par Jonathan Allan . (défectueux)
Explication pour la dernière ligne:
n
apparaît deux fois dans le triangle Pascal" équivaut à "n
n'apparaît pas dans les premièresn-1
lignes".true
si le nombre n'est pas un nombre premier (c'est-à-direÆP == 0
) et que le nombrec
est nul. On peut en déduire celaÆP == c
.On peut prouver que s'ils sont égaux, alors ils sont égaux à 0, car:
ÆP
renvoie une valeur booléenne, qui ne peut être que 0 ou 1.n
est un nombre premier, donc il ne peut pas apparaître dans les premièresn-1
lignes (c'est-à-direc == 0
)la source
1
n'est pas un nombre premier Pascal; cela dit que c'est le cas.Ḷc€ḶFċoÆP¬
fonctionnerait je pense.ċ=ÆP
devrait marcher.Ḷcþ`Fċ=ÆP
devrait également fonctionner.Haskell ,
8684 octetsEssayez-le en ligne!
Explication
La fonction
p
définit récursivement un triangle de Pascal dégénéré:Comme nous pouvons le voir (dans cette solution,
1
c'est quelque chose de spécial), chaque nombren
apparaît exactement deux fois dans lan+1
th ligne et tous les éléments des lignes suivantes ne font que s'agrandir, donc nous avons seulement besoin de vérifier sin
est quelque part jusqu'à lan
th ligne pour voir si un l'élément est disqualifié:Maintenant, nous avons
True
pour tous les éléments qui apparaissent plus de deux fois (sauf1
), donc tout ce dont nous avons besoin est d'avoir uneisPrime
fonction défectueuse qui retourneTrue
pour1
:la source
APL (Dyalog) ,
44342419 octets5 octets enregistrés grâce à @Cowsquack
Essayez-le en ligne!
Comment?
Nous nous assurons que ni
⍳
- gamme0
..n-1
,⍳∘.!
- sur binôme cartésien avec soi⊢∊
- contenirn
,⍱
- pas plus⊢|⍨
-n
modulo chaque élément de2↓⍳
- gamme2
..n-1
~0∊
- ne contient pas0
(alias non divisible)la source
(∨/1↓1≠⊢∨⍳)∧(~⊢∊⍳∘.!⍳)
est plus court de deux octets(0∊⊢|⍨2↓⍳)∧∘~⊢∊⍳∘.!⍳
pour deux autres, j'ai changé l'algorithme de vérification de primalité~
donne(~0∊⊢|⍨2↓⍳)⍱⊢∊⍳∘.!⍳
pour un octet de moins.JavaScript (Node.js) ,
103101 octetsEssayez-le en ligne!
la source
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 fonctionne mais en fait pour petite gammeRubis ,
9795 octetsEssayez-le en ligne!
Gratté quelques octets.
la source
R , 55 octets
Essayez-le en ligne!
sum(!n%%1:n)>2
est le test composite etouter(1:n-1,1:n,choose)
Calcule lignes0
àn-1
du triangle de Pascal, de sorte que nous nous assurons quen
ne semble pas là.la source
05AB1E , 10 octets
Essayez-le en ligne!
Explication
Vérifie qui
n
se produit exactement deux fois dans les n + 1 premières rangées de triangle pascals et n'est pas premier.La comparaison fonctionne car il n'y a pas de nombres premiers pouvant apparaître 3 fois dans le triangle.
la source
Haskell , 90 octets
Essayez-le en ligne!
la source
Pyth , 10 octets
Essayez-le en ligne! ou consultez la suite de tests.
la source
JavaScript (Node.js) ,
79133130128 octetsEssayez-le en ligne!
vérificateur principal du mal +50 octets :(
la source
Python 2 ,
105104 bytesmerci à user202729 pour -1 octet
Essayez-le en ligne!
la source
p+r
semble redondante ...