(Inspiré au hasard par /mathpro//q/339890 )
(Connexes: 1 , 2 )
Étant donné une liste d'entrée de nombres premiers distincts (par exemple, [2, 5, 7]
) et un entier n
, sortez tous les entiers positifs strictement inférieurs à ceux n
qui ne contiennent que ces nombres premiers comme diviseurs. Pour l' entrée [2, 5, 7]
et n=15
cela signifie une sortie [2, 4, 5, 7, 8, 10, 14]
.
Autres exemples
[list] n | output
[2, 5, 7] 15 | [2, 4, 5, 7, 8, 10, 14]
[2, 5, 7] 14 | [2, 4, 5, 7, 8, 10]
[2] 3 | [2]
[2] 9 | [2, 4, 8]
[103, 101, 97] 10000 | [97, 101, 103, 9409, 9797, 9991]
[97, 101, 103] 104 | [97, 101, 103]
Règles et clarifications
- La liste d'entrée est garantie non vide, mais peut être un seul élément
- Vous pouvez supposer que la liste d'entrée est pré-triée de la manière la plus pratique
n
sera toujours plus grand que le plus grand élément de la liste d'entrée- Depuis, par exemple,
2**0 = 1
vous pouvez éventuellement inclure1
dans votre liste de sortie - L'entrée et la sortie peuvent être fournies par n'importe quelle méthode pratique
- Vous pouvez imprimer le résultat dans STDOUT ou le renvoyer comme résultat de fonction
- Un programme complet ou une fonction sont acceptables
- Le cas échéant, vous pouvez supposer que les entiers d'entrée / sortie correspondent à la
int
plage native de votre langue - Les failles standard sont interdites
- Il s'agit de code-golf donc toutes les règles de golf habituelles s'appliquent et le code le plus court (en octets) gagne
1
dans la sortie.[2, 3, 7]
vous ne pouvez pas utiliser5
.Réponses:
Stax , 6 octets
Exécutez-le et déboguez-le sur staxlang.xyz!
Déballé (7 octets) et explication:
la source
05AB1E , 6 octets
Prend l'entier comme première entrée, la liste comme deuxième. Inclut l'option
1
en sortie.Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
Deux alternatives de 6 octets fournies par @Grimy :
Essayez-le en ligne.
Celui-ci est très lent (le
[2,5,7], 15
cas de test expire déjà), mais moins comme les deux autres approches:Contrairement aux deux autres programmes ci-dessus, il prend la liste comme première entrée et un entier comme deuxième.
1
Cependant, il inclut également l'option en option .Essayez-le en ligne.
la source
sиPѦʒ›
. Je pensais avoir un 6, mais il ne semble pas y avoir moyen d'utilisers
/I
/¹
4747561509943000000000000000
. ;)GNfåP–
JavaScript (ES6),
64 ... 5250 octetsPrend l'entrée comme
(n)(primes)
où les nombres premiers sont un ensemble. Sorties en modifiant l'ensemble.Essayez-le en ligne!
Commenté
la source
Python 3 ,
6865 octetsEssayez-le en ligne!
-3 octets grâce à @xnor
La fonction prend une séquence principale et un entier n comme entrées. La sortie est une liste qui comprend 1.
Non golfé:
Essayez-le en ligne!
la source
c*s<n*s
. Edit:n//c*s
est plus court.Haskell , 51 octets
x
p
mapM((<$>[0..n]).(^))p
product
n
p
Essayez-le en ligne!
la source
Haskell , 39 octets
Essayez-le en ligne!
Vérifie si
k
est divisible uniquement par les nombres premiers enl
voyant si le produit del
pris à une puissance élevée est divisible park
.la source
Python 2 , 65 octets
Essayez-le en ligne!
Vérifie si
k
est divisible uniquement par les nombres premiers enl
voyant si le produit del
pris à une puissance élevée est divisible park
.Si
l
peut être considéré comme une liste de chaîneseval("*".join(l))
enregistre 3 octets surreduce(int.__mul__,l)
et peut être utilisé en Python 3 qui manquereduce
.Python 3 , 64 octets
Essayez-le en ligne!
Une fonction les imprime dans l'ordre inverse et se termine par une erreur.
La solution récursive ci-dessous serait plus courte si
n
elle - même était incluse dans la liste. J'ai également essayé de calculer le produit récursivementl
, mais c'était plus long.62 octets (non fonctionnel)
Essayez-le en ligne!
la source
Gaia , 10 octets
Essayez-le en ligne!
Je ne l'ai jamais utilisé
‡
avec une monade auparavant, c'est très utile pour la manipulation de la pile.la source
J , 24 octets
Essayez-le en ligne!
la source
Gelée , 7 octets
Essayez-le en ligne!
Un lien dyadique prenant la limite supérieure exclusive comme argument de gauche et la liste des nombres premiers comme droite. Renvoie une liste qui comprend 1 ainsi que les nombres composés uniquement des nombres premiers fournis.
Une alternative 7 serait
ṖÆfḟ¥Ðḟ
la source
Python 2 , 98 octets
Essayez-le en ligne!
la source
Japt
-f
,118 octetsEssayez-le
la source
Japt
-f
, 7 octetsEssayez-le
la source
1
dans la sortie, ce qui ne devrait pas être le cas. J'ai aussi commencé aveck e!øV
ma solution mais j'avais besoin des 2 octets supplémentaires pour filtrer0
&1
.Since, e.g., 2**0 = 1, you can optionally include 1 in your output list
Rubis
-rprime
, 61 octetsEssayez-le en ligne!
la source
Retina 0.8.2 , 64 octets
Essayez-le en ligne! La liste inclut des cas de test plus petits (
10000
expire à cause de toutes les longues chaînes). Prend la saisie dans l'ordren f1 f2 f3...
(les facteurs n'ont pas besoin d'être premiers mais doivent être coprimes). La sortie comprend1
. Explication:Convertissez en unaire.
Générez une liste de 0 à
n-1
, à la fois décimale et unaire.Divisez à plusieurs reprises l'unaire par tous les facteurs disponibles.
Affiche les nombres décimaux où le nombre unaire a été réduit
1
.la source
Pyth , 10 octets
Essayez-le en ligne!
Prend l'entrée comme
[[primes...], n]
la source
Perl 6 , 27 octets
Essayez-le en ligne!
Port de la solution Haskell de xnor. Émet également 1.
la source
Fusain ,
2220 octetsEssayez-le en ligne! Le lien est vers la version détaillée du code. Trop lent pour le cas de test plus grand. Explication:
Réponse précédente plus rapide de 22 octets:
Essayez-le en ligne! Le lien est vers la version détaillée du code. La sortie comprend
1
. Explication:Poussez
1
vers la liste vide prédéfinie.Parcourez la liste, y compris tous les éléments qui y sont poussés pendant la boucle.
Multipliez l'élément actuel par chaque amorçage et boucle sur les produits.
Vérifiez si le produit est une nouvelle valeur.
Si oui, poussez-le dans la liste.
Imprimez la liste.
la source
C (clang) , 115 octets
Essayez-le en ligne!
Une solution à base de tamis d'Ératosthène.
(Comprend 1 dans la sortie)
Merci à la suggestion de @ceilingcat: printf (x [i] + "\ 0% d", i ++) au lieu de x [i] && printf ("% d", i), i ++ je suppose que cela déplace le pointeur du littéral mais didn 'ai trouvé aucune documentation, si quelqu'un peut me donner un aperçu, ce serait la bienvenue.
la source
x[i]==1
alors la chaîne est"%d "
. Six[i]==0
alors la chaîne est""
. Les chaînes C sont terminées par un caractère nul, donc un caractère nul explicite termine la chaîne. Ce hack abuse également de certains comportements indéfinis en clang liés à lai++
.