Un nombre entier est premier si et seulement s'il est positif et a exactement 2 diviseurs distincts: 1 et lui-même. Une paire prime jumelle est composée de deux éléments: p
et p±2
, qui sont tous deux premiers.
Vous recevrez un entier positif en entrée. Votre tâche consiste à renvoyer une vérité / fausse selon que l'entier donné appartient à une paire jumelle, en suivant les règles standard de problème de décision (les valeurs doivent être cohérentes).
Cas de test
Truthy (Twin Primes):
3, 5, 7, 11, 13, 17, 19, 29, 31, 41, 43
Falsy (pas Twin Primes):
2, 15, 20, 23, 37, 47, 97, 120, 566
C'est le code-golf , donc le code le plus court en octets gagne!
code-golf
number
decision-problem
primes
Taylor Scott
la source
la source
Réponses:
Brachylog ,
98 octetsEssayez-le en ligne!
Explication
la source
√
Utilisation intelligente ! +1Gelée ,
109 octetsEssayez-le en ligne!
Contexte
À l'exception de (3, 5) , toutes les paires principales jumelles sont de la forme (6k - 1, 6k + 1) .
Puisque (6k - 1) + (6k - 1)% 6 - 3 = 6k - 1 + 5 - 3 = 6k + 1 et
(6k + 1) + (6k + 1)% 6 - 3 = 6k + 1 + 1 - 3 = 6k - 1 , pour une entrée n> 3 , il suffit de vérifier si n et n + n% 6 - 3 sont tous les deux premiers.
Cette formule qui arrive à travailler pour n = 3 , ainsi, que 3 + 3% 6 - 3 = 3 est premier et 3 est un premier double.
Comment ça marche
la source
Python 3 , 53 octets
Essayez-le en ligne!
Contexte
Tous les entiers prennent l'une des formes suivantes, avec un entier k : 6k - 3 , 6k - 2 , 6k - 1 , 6k , 6k + 1 , 6k + 2 .
Puisque 6k - 2 , 6k et 6k + 2 sont tous pairs, et puisque 6k - 3 est divisible par 3 , tous les nombres premiers sauf 2 et 3 doivent être de la forme 6k - 1 ou 6k + 1 . Étant donné que la différence d'une paire prime jumelle est de 2 , à l'exception de (3, 5) , toutes les paires prime jumelles sont de la forme (6k - 1, 6k + 1) .
Soit n la forme 6k ± 1 .
Si n = 6k -1 , alors n + n% 6 - 3 = 6k - 1 + (6k - 1)% 6 - 3 = 6k - 1 + 5 - 3 = 6k + 1 .
Si n = 6k + 1 , alors n + n% 6 - 3 = 6k + 1 + (6k + 1)% 6 - 3 = 6k + 1 + 1 - 3 = 6k - 1 .
Ainsi, si n fait partie d'une paire principale jumelle et n ≠ 3 , son jumeau sera n + n% 6 - 3 .
Comment ça marche
Python n'a pas de test de primalité intégré. Bien qu'il existe des moyens courts de tester la primalité d'un seul nombre, le faire pour deux nombres serait long. Nous allons plutôt travailler avec des diviseurs.
compte le nombre d'entiers k dans l'intervalle [2, 4n) divise (n + n% 6 - 3) n uniformément, c'est-à-dire qu'il compte le nombre de diviseurs de (n + n% 6 - 3) n dans l'intervalle [2 , 4n) . Nous affirmons que ce nombre est de 2 si et seulement si n fait partie d'une paire principale jumelle.
Si n = 3 (un nombre premier jumeau), (n + n% 6 - 3) n = 3 (3 + 3 - 3) = 9 a deux diviseurs ( 3 et 9 ) dans [2, 12) .
Si n> 3 est un nombre premier jumeau, comme vu précédemment, m: = n + n% 6 - 3 est son jumeau. Dans ce cas, mn a exactement quatre diviseurs: 1, m, n, mn .
Puisque n> 3 , nous avons m> 4 , donc 4n <mn et exactement deux diviseurs ( m et n ) tombent dans l'intervalle [2, 4n) .
Si n = 1 , alors (n + n% 6 - 3) n = 1 + 1 - 3 = -1 n'a pas de diviseurs dans [2, 4) .
Si n = 2 , alors (n + n% 6 - 3) n = 2 (2 + 2 - 3) = 2 a un diviseur (lui-même) dans [2, 8) .
Si n = 4 , alors (n + n% 6 - 3) n = 4 (4 + 4 - 3) = 20 a quatre diviseurs ( 2 , 4 , 5 et 10 ) dans [2, 16) .
Si n> 4 est pair, 2 , n / 2 et n divisent tous n et, par conséquent, (n + n% 6 - 3) n . Nous avons n / 2> 2 puisque n> 4 , il y a donc au moins trois diviseurs dans [2, 4n) .
Si n = 9 , alors (n + n% 6 - 3) n = 9 (9 + 3 - 3) = 81 a trois diviseurs ( 3 , 9 et 21 ) dans [2, 36) .
Si n> 9 est un multiple de 3 , alors 3 , n / 3 et n divisent tous n et, par conséquent, (n + n% 6 - 3) n . Nous avons n / 3> 3 depuis n> 9 , il y a donc au moins trois diviseurs dans [2, 4n) .
Enfin, si n = 6k ± 1> 4 n'est pas un nombre premier jumeau, n ou m: = n + n% 6 - 3 doit être composite et, par conséquent, admettre un diviseur approprié d> 1 .
Puisque n = m + 2 ou m = n + 2 et n, m> 4 , les entiers d , m et n sont des diviseurs distincts de mn . De plus, m <n + 3 <4n depuis n> 1 , donc mn a au moins trois diviseurs dans [2, 4n) .
la source
05AB1E ,
109 octets1 octet enregistré grâce à Datboi
Essayez-le en ligne! ou comme suite de tests
Explication
la source
ÌIÍ‚
au lieu de40SÍ+
pour -1 octetPHP, 52 octets
sans GMP, 84 octets
(en utilisant ma fonction principale de débordement de pile )
Exécuter en tant que tuyau avec
-nF
. Sortie vide pour faux,1
pour vrai.La grande solution de Dennis portée sur PHP, 56 octets
Exécuter en tant que pipe avec
-nR
ou l' essayer en ligne .la source
Mathematica, 33 octets
Essayez-le en ligne!
la source
MATL , 11 octets
La sortie est
0
ou1
.Essayez-le en ligne!
Explication
la source
Pyth ,
14 1211 octetsSuite de tests.
Enregistré 3 octets en utilisant la formule dans la réponse de @Dennis. 1 octet enregistré grâce à @Dennis.
Pyth , 14 octets * Solution initiale
Suite de tests.
la source
Rétine ,
4544 octetsRenvoie 1 si l'entrée est un nombre premier jumeau, 0 sinon
Essayez-le en ligne!
Explication
Convertir en unaire
Mettez n-2, n et n + 2 sur leurs propres lignes
(Trait de fin de ligne) Supprimer tous les composites supérieurs à 1
Vérifiez s'il y a deux nombres premiers consécutifs (ou 1,3 car 3 est un nombre premier jumeau)
la source
Perl 6 , 24 octets
Essayez-le en ligne!
*
est l'argument de cette fonction anonyme.0 & (-2 | 2)
est la jonction composée des nombres0
ET ou-2
OU2
. L'ajout*
à cette jonction produit la jonction du nombre*
ET de l'un ou l'autre des nombres* - 2
OU* + 2
. L'appel de lais-prime
méthode sur cette jonction renvoie une valeur véridique si*
est premier ET que* - 2
OU soit* + 2
premier. Enfin, le?
réduit la jonction véridique à une valeur booléenne, satisfaisant la condition de valeurs de retour cohérentes.la source
JavaScript,
91 octets, 81 octets grâce à Jared SmithExplication
p
indique si le nombre donnén
est premier ou non, ett
teste le nombre donnén
etn±2
.Exemple
Afficher l'extrait de code
la source
var
, des parenthèses autourn
de la définition de la fonction, etc.n
côté de la valeur det(n)
pour une clarté accrue (par exemple.7: true
)J, 23 octets
Essayez-le en ligne!
Comment?
la source
3>0#.@p:0 2 _2&+
05AB1E , 8 octets
Réponse de Port of Dennis 'Jelly
Essayez-le en ligne! ou comme suite de tests
Explication
la source
Ruby, 38 + 6 = 44 bytes
Requires options
-rprime
.Try it online!
la source
&
instead of&&
JavaScript(ES6), 54 bytes
Show code snippet
la source
Excel VBA,
102100 BytesNo primality built-ins for VBA :(
Code
Anonymous VBE immediate window function that takes input from cell
[A1]
and outputs either1
(truthy) or0
(falsy) to the VBE Immediate windowHelper Function
Alternatively, 122 Bytes
Code
Recursive primality checking function based solution
Helper Function
la source
PHP, 85 bytes 24 bytes thanks to Mayube
la source
a
andb
)function
keyword anymore?Python 2, 75 bytes
Try it online!
la source
Japt, 13 bytes
Returns
true
andfalse
for whether or not the number is part of a prime twin pair.Try it online!
Explanation
Implicit:
U
= input integerCheck if the input is prime (
j
), AND (©
) ...Using the array
[U+2, U-2]
, check if any items are true (d
) according to the primality function (j
).Implicit output of the boolean result of
is input prime AND is any ±2 neighbor prime
.la source
[U+2U-2]
could be much shorter, but I can't figure out how...