Un nombre est un nombre de Polignac si et seulement s'il est impair et ne peut pas être représenté sous la forme p + 2 n où n est un entier non négatif et p est un entier premier.
Tâche
Écrivez un code qui prend un entier positif et détermine s'il s'agit d'un nombre de Polignac. Vous pouvez afficher deux valeurs distinctes, une pour vrai et une pour faux. Vous devez viser à minimiser votre nombre d'octets.
Cas de test
Pour les cas positifs, voici l'OEIS
1, 127, 149, 251, 331, 337, 373, 509, 599, 701, 757, 809, 877, 905, 907, 959, 977, 997, 1019, 1087, 1199, 1207, 1211, 1243, 1259, 1271, 1477, 1529, 1541, 1549, 1589, 1597, 1619, 1649, 1657, 1719, 1759, 1777, 1783, 1807, 1829, 1859, 1867, 1927, 1969, 1973, ...
Voici quelques cas négatifs:
22, 57
code-golf
number
number-theory
decision-problem
Assistant de blé
la source
la source
Réponses:
Japt ,
91413 octetsTestez-le en ligne! ou Trouver tous les nombres entiers de Polignac inférieurs à 1000 .
Sorties
1
pour entrées fausses et0
pour véridiques.Explication
la source
false
mais ce ne sont pas des numéros de Polignac.3
est corrigé, mais nous n'avions pas à gérer même les cas au début. Fixation.3
ne coûte pas d'octets, puis j'ai vu le correctif pour2
- Aïe!Gelée ,
1110 octets1 octet enregistré grâce à @Dennis
Essayez-le en ligne!
Comment ça marche
la source
Ḷ2*⁸_ÆPS<Ḃ
enregistre un octet. tio.run/##ASQA2/9qZWxsef//4bi2Mirigbhfw4ZQUzzhuIL/…¬;ḂẠ
.S<Ḃ
est bien loin des sentiers battus, du moins pour moi :-)JavaScript (ES6),
56 5453 octetsRenvoie0 ou 1 .
Essayez-le en ligne!
Comment?
Nous commençons avecp=1 . Nous testons si y=n−p est composite et donnons un booléen en conséquence. Le test suivant est effectué avec p×2 .
Dès quep est supérieur à n , nous arrêtons la récursivité et retournons n .
Les résultats de toutes les itérations sont ET ensemble, contraignant les valeurs booléennes à0 ou 1 .
À condition que tous les résultats intermédiaires soient véridiques, nous nous retrouvons avec un test au niveau du bit tel que:
1 & 1 & 1 & n
Cela donne1 si et seulement si n est impair, qui est la dernière condition requise pour valider l'entrée en tant que nombre de Polignac.
la source
n%2
ou similaire: PPython 2 ,
605756 octetsEssayez-le en ligne!
la source
&n&
. Le nombre 5 serait un faux négatif s'il s'agissait d'un nombre de Polignac, car 1 + 4 = 5, mais ce n'est pas un problème car 2 + 3 = 5 de toute façon.Gelée , 10 octets
Une soumission Jelly de 10 octets alternative à celle déjà publiée.
Un lien monadique renvoyant 1 pour les nombres de Polignac et 0 sinon.
Essayez-le en ligne! ou voir ceux de moins de 1000 .
Comment?
la source
05AB1E ,
98 octets-1 octet grâce à Emigna
Sorties
0
pour entrées véridiques et1
pour entrées fausses.Essayez-le en ligne!
la source
1å
pourrait êtreZ
.Python 2 , 99 octets
Essayez-le en ligne!
-4 octets grâce à Leaky Nun
-2 octets grâce à Wondercricket
+8 octets pour corriger une erreur
-1 octet merci à M. Xcoder
-3 octets grâce à Einkorn Enchanter
+12 octets pour corriger une erreur
la source
Regex (ECMAScript), 97 octets
Ce problème a posé un cas intéressant pour contourner le problème du manque d'anticipation non atomique. Et c'est la seule fois jusqu'à présent que j'ai eu une bonne raison de mettre les deux versions du test de puissance de 2,
((x+)(?=\2$))*x$
et(?!(x(xx)+)\1*$)
, dans le même regex, et la seule fois jusqu'à présent, j'ai eu besoin de protéger le test principal contre la correspondance 1, comme(?!(xx+)\1+$)xx
, lorsqu'il est utilisé dans une expression régulière plus grande.^(?!(xx)*$|(x+)((?!(xx+)\4+$).*(?=\2$)((x+)(?=\6$))*x$|(?!(x(xx)+)\7*$).*(?=\2$)(?!(xx+)\9+$)xx))
Essayez-le en ligne!
Regex (ECMAScript + antenne moléculaire),
5352 octets^(?!(xx)*$|(?*xx+(((x+)(?=\4$))*x$))\2(?!(xx+)\5+$))
Cette version est non seulement beaucoup plus propre, mais beaucoup plus rapide, car au lieu d'avoir à parcourir toutes les façons possibles que N est la somme de deux nombres, elle peut simplement parcourir en soustrayant chaque puissance de 2 de N et tester la différence pour être premier .
La tête de lecture moléculaire peut être facilement convertie en vue arrière de longueur variable:
Regex (.NET ou ECMAScript 2018),
5554 octets^(?!(xx)*$|xx+(((x+)(?=\4$))*x$)(?<=(?<!^\5+(x+x))\2))
Essayez-le en ligne! (.NET)
Essayez-le en ligne! (ECMAScript 2018)
la source
^(?!(x+)((?!(xx+)\3+$)x*(?!(x(xx)+)\4*$)|x(?!(x(xx)+)\6*$)x*(?!(xx+)\8+$)x)?\1$)
sans trop de difficulté. Ensuite, avec une réflexion approfondie, vous pouvez jouer au golf plus loin^(?!(x+)((x?)(?!(x(x\3)+)\4+$)x*(?!(x(xx)+|\3\3+)\6+$)\3)?\1$)
. Plus court peut être encore possible(x(xx)+|\3\3+)
->(x\3?(xx)+)
Mathematica, 41 octets
la source
PrimeQ[#-2^Range[0,Log2@#]]
parPrimeQ[#-2^Range[0,#]]
puis parPrimeQ[#-2^Range@#/2]
.PHP , 75 octets
imprime 1 pour la vérité et 0 pour la fausse
Essayez-le en ligne!
Essayez-le en ligne! Polignac Entiers sous 10000
la source
Pari / GP , 34 octets
Essayez-le en ligne!
la source
Brachylog ,
1513 octetsEssayez-le en ligne!
Sortie de Polignac jusqu'à 1000.
Retourne
false.
pour les nombres de Polignac ettrue.
autrement.Basé sur la réponse supprimée de @ LeakyNun, avec quelques corrections de bugs (publiés avec leur permission).
(-2 octets en utilisant la méthode de @Jonathan Allan pour vérifier si le nombre est une puissance de deux.)
Le numéro donné n'est pas un numéro de Polignac si:
la source
=h2
serait 1 octet plus court mais cela ne fonctionne pas non3
plus.Gelée , 13 octets
Essayez-le en ligne!
Sorties
1
pour faux et0
pour vrai.la source
Ḷ2*ạfÆRṆ
puis vérifiez la paritéḶ2*ạfÆRṆo‘Ḃ
revient1
pour les deux127
et22
; Ce n'est pas juste. À moins que ce ne soit pas ce que vous avez suggéré.0
149.ạ
pour le_@
corriger.Perl 6 , 55 octets
Essayez-le en ligne!
(1, 2, 4 ... * > $_)
est une séquence des puissances de deux jusqu'à l'argument d'entrée (Perl déduit la série géométrique des éléments fournis).grep &is-prime, ^$_
est la liste des nombres premiers jusqu'à l'argument d'entrée.[X+]
évalue la somme de tous les éléments du produit croisé des deux séries.J'aurais pu me passer
so
de deux octets de moins, mais cela renvoie deux valeurs de falsification distinctes (0
etFalse
).la source
Axiome, 86 octets
test et résultats
la source
Haskell,
104102 octetsExplication
(+)
fonction partielle appliquée à 2 ^ qui est appliquée à une liste [0..input]MISE À JOUR: Criez à Einkorn Enchanter pour jouer au golf sur deux octets!
la source
p x=[x]==[i|i<-[2..x],x`mod`i<1]
est un test de primalité plus court.filter p[1..k]
au lieu defilter(p)[1..k]
Lisp commun, 134 octets
Retourne
NIL
quand l'argument est un nombre de Polignac,T
sinon.Essayez-le en ligne!
Non golfé:
la source
APL (Dyalog Extended) , 12 octets
Essayez-le en ligne!
Fonction tacite de préfixe anonyme. Renvoie 1 pour la vérité, 0 pour la fausse.
Largement basé sur la réponse Japt d'ETHProductions .
Merci à @ Adám d'avoir aidé à jouer au golf ma réponse originale et d'avoir fait Dyalog Extended d'ailleurs.
Comment:
la source
Python 2 , 98 octets
Essayez-le en ligne!
la source
Pyth , 14 octets
Essayez!
la source
Julia 0.4 , 31 octets
Essayez-le en ligne!
la source
APL (NARS) 80 caractères, 160 octets
La fonction 0π est la fonction qui renvoie son argument premier ou non. Pour moi cette fonction n'est pas récursive donc elle est un peu plus longue ... Test:
pour entrée <= 0 ou entrée> = 9E9, il renvoie ¯1 (erreur)
la source
C # (Visual C # Interactive Compiler) , 107 octets
Essayez-le en ligne!
Pas le code le plus efficace, mais semble fonctionner. Ma solution d'origine a filtré les nombres premiers avant de les tester dans la formule et elle a fonctionné beaucoup mieux. La version actuelle est plus courte de 11 octets.
la source