Un nombre est un nombre premier de Chen s'il remplit deux conditions:
- C'est le premier lui-même
- Lui-même plus deux est un nombre premier ou semi-premier.
Un nombre premier est un nombre où il a exactement deux diviseurs et ces diviseurs se composent de lui-même et d'un.
Un semi-premier est un nombre qui est le produit de deux nombres premiers. (Notez que 12 = 2 * 2 * 3 n'est pas semi-premier, mais 25 = 5 * 5 l'est).
Votre tâche consiste à déterminer si un nombre est un nombre premier de Chen. Vous devez afficher toute valeur vraie pour oui et toute valeur fausse pour non.
L'entrée sera un entier supérieur ou égal à un. Il peut également être considéré comme une chaîne, un tableau de caractères ou un tableau ou des chiffres.
Exemples:
101 -> truthy
223 -> falsy
233 -> truthy
1 -> falsy
Il s'agit d'OEIS A109611 .
Ceci est en partie inspiré par Am I a Sophie Germain prime? qui, malheureusement, a été fermé en double, donc je poste un défi quelque peu similaire qui n'est pas un double.
True
pour la vérité et /2
ouFalse
pour la fausse (valeurs de fausse incohérentes)?2 * 2 * 2 * 3 * 3
un semi-premier? Et alors5 * 5
?5*5
est semi-premier,2*2*2*3*3
non. J'ai dit exactement deux.2*2*2*3*3
a exactement deux facteurs premiers, à savoir2
et3
, et5*5
a un facteur premier, à savoir5
.) Peut-être pourriez-vous modifier cela dans la question?Réponses:
Brachylog , 7 octets
Essayez-le en ligne!
Explication
la source
05AB1E , 8 octets
Essayez-le en ligne!
Explication
la source
ArnoldC , 1339 octets
Essayez-le en ligne!
(Ceci est mon premier article sur codegolf.SE, faites-le moi savoir s'il est mal formaté. Je me rends compte que ce nombre d'octets n'est pas compétitif, c'est juste pour le plaisir.)
la source
Gelée , 10 octets
Essayez-le en ligne!
la source
Pyth, 10 octets
Essayez-le en ligne!
Comment?
la source
Python avec sympy ,
6956 octets-13 octets grâce à alephalpha (en passant à sympy 1.1 et en utilisant
primeomega(n+2)
pour remplacersum(factorint(n+2).values())
)... succédant à la soumission supprimée de Gryphon.
Une fonction sans nom retournant
True
pour les nombres premiers de Chen etFalse
autrement.Compte les facteurs de
n+2
en additionnant les multiplicités de son facteur premier.Notez que
3
est multiplié parisprime(n)
avant que la<
comparaison ne soit faite, donc pour non-primen
le code teste sin+2
a moins de0
facteurs (toujours en rendementFalse
), tandis que pour primen
il vérifie sin+2
est premier ou semi-premier.la source
3*isprime(n)
astuce est ce que je cherchais pour nettoyer la déclaration conditionnelle.Pari / GP , 29 octets
L'
3*isprime(n)
astuce est dérobée à la réponse de Jonathan Allan .Essayez-le en ligne!
la source
Java 8,
858483 octets-1 octets grâce à @ OlivierGrégoire en utilisant une approche itérative au lieu de récursive.
Explication:
Essayez-le ici.
la source
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 octets
la source
JavaScript (ES6),
6361 octetsDéfinit une fonction
f
qui prendn
comme argument et renvoie le résultat. Im très heureux de la façon dontg
s'est avéré; il compte le nombre de facteurs premiers dans un nombre.Sauvegarde de 2 octets grâce à l'
&
astuce de Kevin Cruijssen .Non golfé
la source
&&
en&
? Depuis 0/1, les valeurs truey / falsey sont-elles également dans JS?|
et&
ne court-circuitez pas, cela pourrait économiser encore plus d'octetsg
.Japt ,
2220191312 octetsEssaye-le
la source
PHP, 64 octets
imprime
0
pour véridique, d'autres entiers pour faux. Exécuter en tant que pipe avec-nR
ou l' essayer en ligne .panne
valeur de fausse cohérence, 65 octets:
imprime
1
pour la vérité et0
pour la fausseté.la source
Python 3 avec SymPy,
7371 octetsEssayez-le en ligne!
Il s'agit d'une version plus élaborée d'une réponse publiée ici plus tôt, mais elle semble avoir été supprimée.
Merci à @JonathanAllan d'avoir économisé 2 octets!
la source
f=
, la création d'une fonction sans nom convient parfaitement au code-golf.PHP , 87 octets
Essayez-le en ligne!
PHP , 87 octets
Essayez-le en ligne!
la source
APL NARS, 23 caractères
Ici π⍵ renvoie le tableau de facteurs de ⍵ différent de 1; un test:
la source
Regex (ECMAScript), 31 octets
Essayez-le en ligne! (montrant tous les nombres premiers de Chen ≤ 1000)
Étant donné une chaîne de n
x
s, cette expression régulière correspondra si et seulement si n est un nombre premier de Chen.Il affirme que n est supérieur à 2 et que la chaîne n'est pas de la forme.
((xx+)(\2(xx))*)(\1\4)+
Cette expression régulière a deux significations, selon le nombre de
(\2(xx))
répétitions.Lorsqu'il est répété 0 fois, l'expression régulière peut être simplifiée
(xx+)\1+
, ce qui correspond aux nombres composites.Lorsqu'il est répété un nombre de fois positif, l'expression régulière est équivalente à
((xx+)(\2xx)+)(\1xx)+
Ce regex nécessite quelques explications, cependant, je fournirai peu de perspicacité.
Si vous passez par l'algèbre, vous trouvez que
((xx+)(\2xx)+)(\1xx)+
correspond aux numéros du formulairea*b*c-2
oùa≥4,b≥2,c≥2
.Il correspondra donc (presque) chaque fois que n +2 a plus de 2 facteurs premiers. (c'est-à-dire ni premier ni semi-premier)
Notez qu'il ne correspond pas à 6, 16 ou 25, mais que cela n'a pas d'importance, car ils sont tous composites.
Donc,
(?!((xx+)(\2(xx))*)(\1\4)+$)
cela correspondra tant que n n'est pas composite et que n +2 est soit premier, soit semi-premier.Malheureusement, cela inclut 1 (et 0), nous vérifions donc que n est au moins 2 avec
xx
Quelques "31 octets" différents sont:
la source
Rubis ,
4941 octetsEssayez-le en ligne!
Merci H.PWiz pour -8 octets
Comment?
Tout d'abord, obtenez une chaîne de
'l'
n + 2 répétées. Ensuite, appliquez une expression régulière pour vérifier si:(.?)(..)
((..+)\1)(..)
((..+)\2)\1+
Les 2 parties regex génèrent un quatrième cas qui n'a pas de sens et qu'il est sûr d'ignorer
(.?)\2+
:, qui se résout en chaîne vide ou en un seul caractère car il\2
est vide.la source
|
rapprochement:^((..+)\2+)(\1+|..)$
. Aussi, une belle coïncidence que vous avez tenté ce problème avec regex à un moment similaire à moi :).
au lieu de.?
puisque l'entrée est toujours au moins 1Julia, 59 octets
la source
Pyt , 11 octets
3 * isprime (x) volé dans la réponse de Jonathan Allan
la source
Haskell , 163 octets
Essayez-le en ligne!
la source