Un nombre premier est faible si l'autre nombre premier le plus proche est plus petit que lui. S'il y a égalité, le nombre premier n'est pas faible.
Par exemple, 73 est un nombre premier faible parce que 71 est premier mais 75 est composite.
Tâche
Écrivez un code informatique qui, lorsqu'il reçoit un nombre premier supérieur à 2 en entrée, déterminera s'il s'agit d'un nombre premier faible. Il s'agit d'un problème de décision standard , vous devez donc générer deux valeurs uniques pour chacun des deux cas (par exemple, weak
et not weak
).
Il s'agit de code-golf , les règles standard pour le tag s'appliquent.
OEIS
Voici les 47 premiers nombres premiers faibles:
3, 7, 13, 19, 23, 31, 43, 47, 61, 73, 83, 89, 103, 109, 113, 131, 139, 151, 167, 181, 193, 199, 229, 233, 241, 271, 283, 293, 313, 317, 337, 349, 353, 359, 383, 389, 401, 409, 421, 433, 443, 449, 463, 467, 491, 503, 509, 523, 547, 571, 577, 601, 619, 643, 647
Voici l'OEIS pour les nombres premiers faibles (devrait revenir weak
) OEIS A051635
Voici l'OEIS pour les nombres premiers équilibrés (devrait revenir not weak
) OEIS A006562
Voici l'OEIS pour les nombres premiers forts (devrait revenir not weak
) OEIS A051634
la source
not weak
oustrong
?Réponses:
Gelée , 7 octets
Essayez-le en ligne!
Explication
En prime, le changement
>
de=
ou des<
chèques pour les nombres premiers équilibrés et solides, respectivement.la source
>
, non?Mathematica, 24 octets
L'
NextPrime
intégré peut être (ab?) Utilisé pour calculer le premier précédent en lui fournissant un argument négatif.la source
Gelée , 9 octets
Renvoie
1
pour faible et0
pour non faible ou équilibré (renvoie1
pour une entrée de2
)Essayez-le en ligne!
Comment?
la source
IIṠ⁼1
àII>0
àI<\
) ... le vôtre est très différent cependant. Il semble que tu penses différemment de moi ... EDIT: Pietu1998 est revenu!PHP , 69 octets
imprime un pour le premier faible et rien pour le premier non faible
Essayez-le en ligne!
la source
Octave,
9384 octetsMerci à @LuisMendo et @ rahnema1 pour avoir économisé des octets!
Essayez-le en ligne!
la source
i-=1
etc? En outre,end
n'est pas nécessaire dans la fonction; vous pouvez le déplacer vers le pied de pageMaxima, 42 octets
Essayez-le en ligne!
la source
MATL , 13 octets
Cela sort
1
si faible,0
sinon.Essayez-le en ligne!
Explication
la source
GNU APL 1.2, 78 octets
∇f N
déclare une fonction qui prend un argument.(~R∊R∘.×R)/R←1↓⍳N×2
donne une liste de tous les nombres premiers de 2 à deux fois l'argument. Je suppose que le premier prime est moins de deux fois l'original. Si ce n'est pas vrai,N*2
donne N au carré et prend le même nombre d'octets (si tout va bien c'est assez grand pour dépasser le premier premier). (Voir l'explication de Wikipedia pour savoir comment fonctionne la recherche de prime)X←(R←(...))⍳N
affecte cette liste au vecteurR
(écrasant son contenu précédent), recherche l'index du nombre premier d'origineN
dans cette liste, puis affecte cet index àX
.|R[X-1]-N
calcule la différence entre le premier précédent (carR
contient les nombres premiers, leX-1
e élément est le premier avantN
)N
, puis prend la valeur absolue (APL fonctionne de droite à gauche).|R[X+1]-N
fait de même, mais pour la prochaine prime.(|R[X-1]-N)<|R[X+1]-N
imprime 1 si l'amorce précédente est plus proche de l'original que l'amorce suivante et 0 sinon. Des parenthèses sont nécessaires pour la priorité.∇
termine la fonction.la source
Gelée , 9 octets
Essayez-le en ligne!
la source
Pyth, 15 octets
Essayez-le ici.
Utilise l'algorithme de Pietu1998.
la source
Perl 6 , 41 octets
Essayez-le en ligne!
$_
est l'argument de la fonction. La fonction de mappage-> \n { $_ + n, * + n ... &is-prime }
prend un nombren
et renvoie une séquence de nombres$_ + n, $_ + 2*n, ...
qui se termine lorsqu'elle atteint un nombre premier. Le mappage de cette fonction sur les deux nombres1
et-1
produit une séquence de deux séquences; le premier commence par$_ + 1
et se termine par le premier nombre premier supérieur à$_
, et le second commence par$_ - 1
et se termine par le premier nombre premier inférieur à$_
.[>]
réduit cette liste à deux éléments avec l'opérateur supérieur à, retournant vrai si la première séquence est plus grande (c'est-à-dire plus longue) que la seconde.la source
Python 2.7 - 120 octets
Puisque python n'a pas de fonction principale intégrée, nous pouvons utiliser le théorème de Wilson pour obtenir un joli vérificateur premier court. Le théorème de Wilson déclare qu'un nombre est premier si et seulement si (n-1)! est congru à -1 mod (n). Par conséquent, la fonction i renverra 1 si le nombre est premier et 0 si ce n'est pas le cas. Ensuite, la fonction f déterminera si le premier nombre premier de ce nombre se produit en premier lors de l'incrémentation vers le bas plutôt que vers le haut. Si aucun des nombres incrémentés n'est premier, il est simplement rappelé de manière récursive.
Quelques exemples d'E / S
la source
Python 2 ,
122108103 1039492 octetsEssayez-le en ligne!
Utilise l'idée de Pietu ... puis a sauvé 28 octets en jouant au golf des itérateurs de liste principale plus courts; puis 2 de plus en remplaçant
-3*n>0
par>3*n
(d'oh!)la source
Regex (la plupart des saveurs), 47 octets
Essayez-le en ligne!
Prend entrée en unaire. Génère une correspondance pour les nombres premiers faibles, aucune correspondance pour les nombres premiers non faibles. Fonctionne en ECMAScript, Perl, PCRE, Python, Ruby.
Explication:
Soit N l'entrée, A le premier le plus proche <N et B le premier le plus proche> N. La principale difficulté d'une approche regex de ce défi est que nous ne pouvons pas représenter des nombres supérieurs à l'entrée, comme B. Au lieu de cela, nous trouver le plus petit b tel que 2b + 1 est premier et 2b + 1> N, ce qui garantit 2b + 1 = B.
Ensuite, notez que nous n'avons pas vraiment besoin de trouver A. Tant que tout premier <N est plus proche de N que B, N est un premier faible.
la source
Octave, 53 octets
Essayez-le en ligne!
la source
JavaScript ES6,
162154 octets8 octets de sauvegarde sur la base de l' astuce de Jörg Hülsermann "ne rien imprimer dans un seul cas". Pas besoin
?"Y":"N"
aprèsone<two
la source
05AB1E , 17 octets
Essayez-le en ligne!
Utilise l'algorithme de Pietu1998.
la source
Python 3 , 149 octets
Essayez-le en ligne!
J'utilise une fonction de génération principale (ligne supérieure) tirée de cette ancienne réponse d'échange de pile.
la source
JavaScript, 98 octets
Moins Golphed
Notez que le code de test ne vérifie pas que l'entrée "prime" est en fait un nombre premier.
la source
braingasme ,
2322 octetsImprime
1
pour des nombres premiers faibles et0
pour non faibles.Procédure pas à pas:
la source
Julia 0,6, 64 octets
la source
Python 2 , 81 octets
Essayez-le en ligne!
Utilise le théorème de Wilson pour le test de primalité.
la source