La tâche
Écrivez un programme ou une fonction qui, une fois entrée numérique x
, imprime ou renvoie les nombres premiers sous la racine carrée de x
1 qui ne sont pas des facteurs de x
.
Exemples
Soit f(x)
la fonction appelée:
>>> f(4)
[]
>>> f(5)
[2]
>>> f(20)
[3]
>>> f(60)
[7]
>>> f(100)
[3, 7]
>>> f(10000)
[3, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
Règles de bonus
- Vous pouvez utiliser n'importe quel module intégré fourni par votre langue.
- Votre programme doit prendre en charge une
x
entrée aussi haute que la limite supérieure définie par votre langue.
1 L' utilisation de la racine carrée comme seuls nombres premiers en dessous de la racine carrée peut réellement être impliquée dans les facteurs de x
. Sans cette restriction, les grands nombres auraient beaucoup de nombres imprimés en excès.
x
" n'est pas vrai: un nombre peut avoir un facteur premier plus grand que sa racine carrée. En effet, vos deux premiers exemples (5 et 20) ont cette propriété, comme tous les nombres premiers, deux fois tous les nombres impairs, ....Réponses:
Jelly, 6 octets dans la page de codes de Jelly
Essayez-le en ligne!
Explication:
la source
MATL ,
109 octetsEssayez-le en ligne!
Explication
la source
Python 3 ,
6762 octetsEssayez-le en ligne!
la source
MATLAB,
5754 octetsAssez simple, obtient un tableau de nombres premiers jusqu'à sqrt (p) puis supprime ceux qui sont également des facteurs de p. Imprime la sortie de la dernière ligne par défaut car le point-virgule est laissé de côté.
la source
Pyth, 10 octets
Un programme qui prend l'entrée d'un nombre et imprime une liste.
Suite de tests
Comment ça fonctionne
la source
05AB1E , 8 octets
Essayez-le en ligne!
Explication
la source
PHP, 76 octets
utilise ma solution is_prime pour $ n> 1
prend l'entrée de l'argument de ligne de commande. Courez avec
-r
.la source
Mathematica, 46 octets
Fonction anonyme. Prend un nombre en entrée et renvoie une liste de nombres en sortie. Le caractère Unicode est U + 2223 DIVIDES pour
\[Divides]
.la source
Ruby, 55 octets
Une réponse plutôt paresseuse en utilisant l'énumérateur principal intégré.
la source
Wonder , 14 octets
Usage:
Prend les éléments d'une liste infinie de nombres premiers tandis que l'élément est inférieur à la racine carrée de l'argument.
la source
Pyke, 10 octets
Essayez-le ici!
la source
PowerShell v2 +, 71 octets
Solution itérative. Prend une entrée
$n
et crée une plage de1
àSqrt($n)
(notez que l'opérateur de plage va implicitement convertir l'extrémité supérieure en un[int]
qui fera l'arrondi de banquier par défaut). Utilise ensuite|?{...}
(l'Where-Object
opérateur, qui agit comme un filtre) pour extraire les nombres où$n%$_
est non nul (c.-à-d., Tout reste du modulo signifie que ce n'est pas un facteur, et que tout non nul est vrai)-and
le test prime regex habituel est$true
. Ceux-ci sont laissés sur le pipeline et la sortie est implicite.Exemples
(avec un formatage supplémentaire pour améliorer la sortie)
NB - Cela échouera sur les versions antérieures si l'entrée est plus grande qu'autour
2500000000
, car l'..
opérateur de plage ne peut prendre en charge que jusqu'à 50 000 éléments. Mais, puisque c'est plus grand que la valeur[int]
maximale du type de données par défaut2147483647
, je suppose que c'est OK. Sur ma machine, PSv4 Win8.1, cependant, je peux aller plus haut, mais je ne trouve pas de documentation expliquant la différence.la source
JavaScript (ES6),
7976 octetsSur la base de mon fonction de test de primalité récursive . Je pense qu'il devrait y avoir quelques façons de simplifier cela, mais je ne peux pas comprendre comment ...
Extrait de test
la source
Octave, 44 octets
Cette réponse est inspirée de la réponse MATLAB de MattWH , mais je l'ai utilisée en utilisant certaines fonctionnalités spécifiques à Octave.
Il s'agit d'une fonction anonyme qui prend l'entrée
x
. Octave a une affectation et une indexation des variables en ligne permettanty
d'être d'abord créées dans la fonction (pas possible dans MATLAB), puis utilisées dans le cadre du masque logique créé parismember
(là encore, impossible de le faire de cette façon dans MATLAB).la source
Perl 6 , 37 octets
Étendu:
la source
TSQL, 130 octets
Cela ne s'exécutera qu'une seule fois, puis vous devrez supprimer la table temporaire pour l'exécuter à nouveau dans le même éditeur
J'ai fait une version pour la tester, elle est un peu plus longue car les permissions en ligne pour créer des tables ne sont pas disponibles. Pour la même raison, il n'a cependant pas besoin de la table de dépôt.
Essayez-le en ligne
la source
R,
5863 octetsBoucle sur toutes les valeurs de 2 à
sqrt(x)
et vérifie si elles sont premières avec lenumbers
package.x%%i
calculex mod i
qui est0 -> False
sii
est un diviseur dex
et>0 -> True
sii
ne l'est pas.+5 octets car la
numbers::Primes(n)
fonction n'autorise pas les décimales, tout en2:sqrt(x)
fonctionnant, ajout d'une vérification principale à l'if
instruction.la source
Haskell,
5554 octetsCompréhensions de listes imbriquées généralement simples. GCD remplit deux rôles, testant si les nombres en dessous de y sont des facteurs de y et testant également si y est un facteur de x.
Espacé un peu:
la source
gcd(z*x)y>1
.Rétine ,
6966 octetsImprime les nombres premiers sur des lignes séparées, du plus grand au plus petit.
Essayez-le en ligne! (Cela prend environ 10 secondes en raison des deux derniers cas de test. L'en-tête et le pied de page permettent une suite de tests séparés par un saut de ligne et convertissent la sortie en virgule de séparation pour plus de lisibilité.)
Explication
Convertissez l'entrée en unaire.
Cela ajoute la racine carrée de l'entrée, séparée par
:
. La racine carrée est calculée sur la base du fait que le carré den
est également la somme des premiersn
entiers impairs. Nous pouvons faire correspondre des entiers impairs consécutifs avec la référence directe(11\1|^1)
. Dans le processus, le groupe sera utilisé exactementn
fois, oùn
est le plus grand nombre dont le carré s'inscrit dans l'entrée.Nous insérons une représentation unaire de ce nombre avec
$#1$*1
, suivie d'un deux-points et de la correspondance elle-même.Cela correspond à tous les nombres premiers manquants qui correspondent à la racine carrée. La détection de prime est basée sur l'expression rationnelle de vérification de prime standard , puis nous nous assurons simplement que le premier que nous venons de capturer ne divise pas l'entrée avec le deuxième lookahead. En utilisant l'
&
option, nous obtenons des correspondances qui se chevauchent pour garantir que nous obtenons tous les nombres premiers.Ceci convertit chaque ligne (c'est-à-dire chaque nombre premier manquant) en décimal en faisant correspondre le nombre de
1
s. Le seul problème est que cela insère un zéro si aucun nombre premier manquant n'a été trouvé.Cette étape supprime donc ce zéro s'il a été ajouté.
la source