L'une de mes définitions préférées des nombres premiers est la suivante:
2 est le plus petit nombre premier.
Les nombres supérieurs à 2 sont premiers s'ils ne sont pas divisibles par un plus petit nombre premier.
Cependant cette définition semble arbitraire, pourquoi 2? Pourquoi pas un autre numéro? Eh bien, essayons d'autres nombres qui définiront n-prime de telle sorte que
n est le plus petit n-premier.
Les nombres supérieurs à n sont n-premiers s'ils ne sont pas divisibles par un n-premier plus petit.
Tâche
La tâche ici est d'écrire un programme qui prend deux entrées, un entier positif n et un entier positif a . Il décidera alors si a est n -prime. Votre programme doit afficher deux valeurs distinctes, une pour «oui, c'est n-prime» et une pour «non, ce n'est pas n-prime».
C'est une question de code-golf donc les réponses seront notées en octets avec moins d'octets étant mieux.
Des tests
Voici les listes des 31 premiers nombres premiers pour n = 2 à n = 12 (1 est le seul nombre à 1 nombre premier)
n=2: [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127]
n=3: [3,4,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127]
n=4: [4,5,6,7,9,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113]
n=5: [5,6,7,8,9,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113]
n=6: [6,7,8,9,10,11,13,15,17,19,23,25,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107]
n=7: [7,8,9,10,11,12,13,15,17,19,23,25,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107]
n=8: [8,9,10,11,12,13,14,15,17,19,21,23,25,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89,97]
n=9: [9,10,11,12,13,14,15,16,17,19,21,23,25,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89,97]
n=10: [10,11,12,13,14,15,16,17,18,19,21,23,25,27,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89]
n=11: [11,12,13,14,15,16,17,18,19,20,21,23,25,27,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89]
n=12: [12,13,14,15,16,17,18,19,20,21,22,23,25,27,29,31,33,35,37,41,43,47,49,53,55,59,61,67,71,73,77]
la source
n=6, a=15
est le premier cas de test intéressant.Réponses:
Haskell , 45 octets
Essayez-le en ligne!
Je définis une belle fonction récursive
(!)
:n!a
vérifie si un facteur dea
, dans la plage[n,a-1]
, est unn-prime
. Ensuite, il annule le résultat. Il s'assure également quen>a
la source
Python 2 ,
3937 octetsMerci à Halvard Hummel pour -2 octets.
Essayez-le en ligne!
la source
Python 3 , 45 octets
Essayez-le en ligne!
Comment ça marche
Cela prend deux entiers en entrée, i et k . Vérifiez d'abord si k ≥ i . Génère ensuite la plage [i, k) et pour chaque entier N dans cette plage, vérifie si N est coprime à k . Si les deux conditions sont remplies, alors k est un i -prime.
la source
&
place deand
et>=i
au lieu de>i-1
?>=i
est toujours de 4 octets (en raison de l'espace).&
vous n'avez pas besoin d'espace.Husk ,
65 octetsEssayez-le en ligne! ou voir les résultats jusqu'à 80 .
Merci à Leo pour -1 octet.
Explication
la source
R ,
4437 octetsEssayez-le en ligne!
-7 octets grâce à Giuseppe
Renvoie
TRUE
sia
est égal àn
ou (a==n|
)a
est supérieur àn
et (a>n&
) pour chaque nombre k den
àa-1
,a
n'est pas divisible par k (all(a%%n:(a-1))
)Retourne
FALSE
autrementla source
J, 30 octets
Essayez-le en ligne!
Prend la valeur de départ comme argument de droite et la valeur à vérifier dans l'argument de gauche.
Je me suis trompé à l'origine et je n'ai pas tenu compte des arguments laissés moins que le nombre premier de départ. Je suis quelque peu mécontent de la longueur de ma solution maintenant.
Explication
Soit
x
l'argument de gauche (la valeur à vérifier) ety
l'argument de droite (le premier de départ).Remarques
L'élément en position
x-y
est le résultat d'un test de primalité pourx
(puisque nous avons ajoutéy
à la plage d'origine).La multiplication par
x >: y
garantit que nous obtenons une valeur de falsey (0
) pourx
moins dey
.la source
JavaScript (ES6),
333230 octetsPrend des entrées dans la syntaxe de currying
(n)(a)
. Renvoie un booléen.Démo
Afficher l'extrait de code
la source
Haskell , 30 octets
2 octets économisés grâce à l'idée de H.PWiz qui a été empruntée à la réponse de flawr
Essayez-le en ligne!
Ok depuis que ça fait un moment, et la seule réponse Haskell jusqu'à présent est de 45 btyes, j'ai décidé de poster ma propre réponse.
Explication
Cette fonction vérifie que le seul nombre entre n et un qui a est divisible par est un lui - même.
Maintenant, la définition ne mentionne que n -primes inférieurs à a , alors pourquoi vérifions -nous tous ces nombres supplémentaires? N'aurons- nous pas de problèmes quand a est divisible par un composé n plus grand que n ?
Nous ne le ferons pas car s'il existe un n -composite supérieur à n, il doit être divisible par un n -prime plus petit par définition. Ainsi, s'il divise a , le plus petit n -prime doit l' être.
Si a est inférieur à n, il
[n..a]
ne peut[]
donc pas être égal,[1]
ce qui entraîne l'échec de la vérification.la source
Gelée , 8 octets
Essayez-le en ligne!
la source
Pip ,
231914 octetsLa méthode la plus courte est un portage de la réponse Python de M. Xcoder . Prend le plus petit nombre premier et le nombre à tester comme arguments de ligne de commande. Essayez-le en ligne!
la source
C, 55 octets
Essayez-le en ligne!
53 octets si plusieurs valeurs de retour véridiques sont autorisées:
Essayez-le en ligne!
la source
dc ,
403437 octetsJ'aurais inclus un lien TIO, mais TIO semble porter une distribution défectueuse de
dc
voir comment cela fonctionne comme prévu sur mon système, mais laQ
commande fonctionne par erreur sur TIO. Au lieu de cela, voici un lien vers unbash
terrain d'essai avec une version fonctionnant correctement dedc
:Démo!
la source
APL (Dyalog) , 24 octets
Essayez-le en ligne!
Comment?
⍳⍵
-1
àa
o←⍺↓
-n
àa
, enregistrer danso
o|⍨⊂o
- modulo chaque élémento
avec chaque élémento
0=
- vérifier où il est égal0
(divise)+/¨
- additionner le nombre de divisions1=
- si nous n'en avons qu'un, le nombre n'est divisé que par lui-mêmeo/⍨
- donc on garde ces occurrences⍵∊
- esta
dans ce tableau résiduel?la source
JavaScript (Node.js) , 27 octets
Essayez-le en ligne!
Port de ma réponse Python, prend une entrée dans la syntaxe de curry:
m(number)(first prime)
la source
JavaScript ES5, 34 octets
la source
Ajouter ++ , 20 octets
Essayez-le en ligne!
la source