Récemment, j'ai lu le roman "La solitude des nombres premiers" où les personnages principaux sont quelque peu comparés aux nombres premiers jumeaux (" toujours ensemble, mais jamais touchant ").
Un nombre premier jumeau est un nombre premier qui est soit 2 de moins, soit 2 de plus qu'un autre nombre premier - par exemple, la paire de nombres premiers jumeaux (41, 43). En d'autres termes, un nombre premier jumeau est un nombre premier qui a un écart principal de deux. Parfois, le terme twin prime est utilisé pour une paire de jumeaux prime; un autre nom pour cela est le premier jumeau ou la première paire. Wikipédia
Bien que je n'aime pas beaucoup le roman déprimant, et depuis que je suis tombé dans PPCG ces derniers temps, cela m'a posé une question ...
Tâche:
Étant donné un nombre entier positif N> 4, trouvez les nombres premiers solitaires ( nombres premiers isolés AKA ) entre les couples les plus proches de nombres premiers jumeaux .
Veuillez noter que dans ce cas avec le terme nombres premiers solitaires , je veux dire tous les nombres premiers qui ne sont pas des nombres premiers jumeaux et entre des couples de nombres premiers jumeaux . C'est pourquoi N> 4 parce que les deux premiers couples de nombres premiers sont (3, 5) et (5, 7).
Exemple:
- N = 90.
- Trouvez les deux premiers couples de nombres premiers jumeaux <N et> N. Ils sont: (71, 73) et (101, 103).
- Trouvez les nombres premiers solitaires dans la plage> 73 et <101.
- Ils sont: 79, 83, 89, 97.
Cas spéciaux:
- Si N est entre deux nombres premiers jumeaux, trouvez les couples les plus proches de nombres premiers jumeaux> N + 1 et <N-1. Exemple: N = 72, trouvez les couples les plus proches de nombres premiers jumeaux> 73 et <71 puis excluez de la liste 71 et 73 car ce ne sont pas des nombres premiers solitaires . Donc pour N = 72 le résultat attendu est: 67,
71,73, 79, 83, 89, 97 - Si N appartient à un couple de nombres premiers jumeaux, par exemple N = 73, les couples de nombres premiers jumeaux les plus proches sont (71, 73) et (101, 103). Si N = 71, les couples de nombres premiers jumeaux les plus proches sont (59, 61) et (71, 73).
Cas de test:
N = 70 > Lonely primes are: 67
N = 71 > Lonely primes are: 67
N = 72 > Lonely primes are: 67, 79, 83, 89, 97 (not the twins 71 and 73)
N = 73 > Lonely primes are: 79, 83, 89, 97
N = 90 > Lonely primes are: 79, 83, 89, 97
N = 201 > Lonely primes are: 211, 223
N = 499 > Lonely primes are: 467, 479, 487, 491, 499, 503, 509
Règles:
- Écrivez un programme ou une fonction complète qui prendra le nombre N de l'entrée standard.
- Afficher la liste des nombres premiers solitaires dans un format lisible comme csv, liste, tableau, etc.
- Le code le plus court gagne.
- Veuillez inclure (si possible) un violon en ligne testable.
Réponses:
En fait, 47 octets
Cette solution traite du cas où se
n
trouve entre deux nombres premiers jumeaux, en vérifiant si la limite inférieure est la plus grande d'une paire de nombres premiers jumeaux (en éliminant le premier jumeau à gauche de nous d'être notre limite inférieure) et si la limite supérieure est le plus petit d'une paire de nombres premiers jumeaux (en éliminant le nombre premier jumeau à droite de nous d'être notre limite supérieure). Pour éviter que les nombres premiers jumeaux soient inclus dans notre plage une fois que nous avons les limites inférieure et supérieure, nous devons supprimer les nombres premiersp
oùp-2
ORp+2
est premier, d'où le OU logique et la négation dans le code.C'est un peu long et peut probablement être joué plus loin. Suggestions de golf bienvenues. Essayez-le en ligne!
Ungolfing
la source
23
lorsque l'entrée24
est donnée. Les bornes principales jumelles doivent être17 / 19
et29 / 31
, et23
est un nombre premier isolé dans la plage19 .. 29
.p
dit25
est premier n'a pas encore été corrigé, soit Dennis n'a pas été retiré depuis la correction du bogue. Laisse-moi aller vérifier.PowerShell v2 +,
237149147231216181174169 169166 octetsPrend des informations
$n
. Définit une nouvelle fonctionf
comme fonction regex prime (renvoyant ici un booléen si l'entrée est un nombre premier ou non).La partie suivante
$i
est égale à$n
, puis se boucle vers le haut jusqu'à ce que nous trouvions la moitié inférieure de notre borne supérieure jumelle. Par exemple, pour l'entrée90
, cela s'arrête à$i=101
.Ensuite, nous bouclons de la borne supérieure vers le bas. Je sais, ça ressemble à une boucle infinie, mais ça finira par finir.
Si le nombre actuel est un nombre premier (
f(--$i)
), mais que ce+/- 2
n'est pas un nombre premier, nous ajoutons$i
au pipeline. Cependant, s'il+/- 2
s'agit d'un nombre premier, nous vérifions si nous sommes inférieurs à$n-1
(c'est-à-dire pour tenir compte de la situation lorsqu'elle se trouve à l'intérieur d'une paire principale jumelle), moment auquel nousexit
. À la fin du programme, le pipeline est imprimé à l'écran via impliciteWrite-Output
.NB - En raison de la structure en boucle, imprime les nombres premiers dans l'ordre décroissant. OP a précisé que c'était OK.
Exemples
La sortie ici est séparée par des espaces, car c'est la méthode de stringification par défaut pour un tableau.
la source
Haskell, 105 octets
Essayez-le en ligne
la source
JavaScript,
186183168158 octetsla source
PHP, 207 octets
4754 octets pour lais_prime
fonction que PHP n'a pas. J'aurais battu Mathematica sans ça. :-RÉcourir avec
-r
. imprime une virgule de fin.panne
Remarque :
La
is_prime
fonction retourne en faittrue
pour$n<2
; mais au moins cela ne produit pas d'avertissement. Insérez$n=
avant$n>1
de fixer.la source
Mathematica,
169157 octetsla source
Raquette 228 octets
L'inconvénient de cette version est qu'elle trouve tous les nombres premiers jusqu'à N et pas seulement ceux autour de N.
Version non golfée:
Essai:
Sortie:
la source
Raquette 245 octets
Version non golfée:
Sortie:
la source
Python 2.7: 160 octets
les suggestions sont les bienvenues :)
la source