Il y a eu beaucoup de défis liés à la factorisation prime / prime récemment, donc j'ai pensé qu'il pourrait être intéressant d'aller dans l'autre sens.
Donné:
- un entier positif
n
, et - une liste non vide d'entiers positifs
f
écrire un programme complet ou une fonction pour trouver le plus petit entier i
tel que i >= n
et i
est un produit de puissances entières non négatives d'éléments dans f
.
Exemples:
Supposons
n = 11, f = [2, 3, 5]
.Les premiers produits sont:
1 = 2^0 * 3^0 * 5^0 2 = 2^1 * 3^0 * 5^0 3 = 2^0 * 3^1 * 5^0 5 = 2^0 * 3^0 * 5^1 4 = 2^2 * 3^0 * 5^0 6 = 2^1 * 3^1 * 5^0 10 = 2^1 * 3^0 * 5^1 9 = 2^0 * 3^2 * 5^0 15 = 2^0 * 3^1 * 5^1 25 = 2^0 * 3^0 * 5^2 8 = 2^3 * 3^0 * 5^0 12 = 2^2 * 3^1 * 5^0 => smallest greater than (or equal to) 11, so we output it. 20 = 2^2 * 3^0 * 5^1 18 = 2^1 * 3^2 * 5^0 30 = 2^1 * 3^1 * 5^1 50 = 2^1 * 3^0 * 5^2 27 = 2^0 * 3^3 * 5^0 45 = 2^0 * 3^2 * 5^1 75 = 2^0 * 3^1 * 5^2 125 = 2^0 * 3^0 * 5^3
Supposons
n=14, f=[9, 10, 7]
.Encore une fois, les premiers produits:
1 = 7^0 * 9^0 * 10^0 7 = 7^1 * 9^0 * 10^0 9 = 7^0 * 9^1 * 10^0 10 = 7^0 * 9^0 * 10^1 49 = 7^2 * 9^0 * 10^0 => smallest greater than (or equal to) 14, so we output it. 63 = 7^1 * 9^1 * 10^0 70 = 7^1 * 9^0 * 10^1 81 = 7^0 * 9^2 * 10^0 90 = 7^0 * 9^1 * 10^1 100 = 7^0 * 9^0 * 10^2
Cas de test:
n, f -> output
10, [2, 3, 5] -> 10
17, [3, 7] -> 21
61, [3,5,2,7] -> 63
23, [2] -> 32
23, [3] -> 27
23, [2, 3] -> 24
31, [3] -> 81
93, [2,2,3] -> 96
91, [2,4,6] -> 96
1, [2,3,5,7,11,13,17,19] -> 1
151, [20,9,11] -> 180
11616, [23,32] -> 12167
11616, [23,32,2,3] -> 11664 = 2^4 * 3^6
5050, [3,6,10,15,21,28,36,45,55,66,78,91,105,120,136,153,171,190,210] -> 5103 = 3^6 * 7
12532159, [57, 34, 12, 21] -> 14183424 = 12^5 * 57
Règles
- Vous pouvez supposer qu'il
f
contiendra au moins un élément et que tous les éléments def
seront supérieurs à 1. - Vous pouvez éventuellement supposer que
f
c'est trié par ordre décroissant / croissant si vous le souhaitez (mais veuillez préciser). - Vous pouvez éventuellement prendre le nombre d'éléments de
f
si vous le souhaitez. - La sortie sous forme de chaîne est autorisée.
- Il s'agit de code-golf , donc la réponse la plus courte en octets dans chaque langue gagne!
- Les règles d'E / S par défaut s'appliquent et les failles standard sont interdites.
- Des explications sont encouragées.
la source
∞
enregistre les3
octets sur-Log@0 (doesn't work on TIO, but works fine on desktop Mathematica). Also,
Tr [1 ^ {##}] `est un octet plus court queLength@{##}
.#2
est encore plus court queTr[1^{##}]
. :)Quiet
dans votre code principal. Cette réponse génère trop de mauvais messages. Demandez au moins à OP s'il est d'accord avec cela∞
problème semble être un bogue. Je vais essayer de régler ça.Python 2 ,
918884 octetsEssayez-le en ligne!
La fonction
f
vérifie récursivement si ellen
est un produit de puissances d'éléments dansl
,g
est juste un wrapper pour contrôler l'itérationla source
Python, 55 octets
Essayez-le en ligne!
Le script de pied de page de Rod copié sans vergogne pour les tests
la source
Gelée , 13 octets
Un lien dyadique prenant la liste,
f
à gauche et le nombren
, à droite qui donne un nombre.Essayez-le en ligne! Golfily inefficace - expirera pour les entrées avec plus
n
et / ou plusf
.Comment?
Nous savons que les pouvoirs des facteurs individuels (strictement positifs) n'auront jamais besoin de dépasser
n-1
... alors inspectons toutes les voies possibles!
la source
Rétine , 76 octets
Essayez-le en ligne! Link exclut les cas de test les plus lents, mais c'est toujours un peu lent, alors essayez de ne pas marteler le serveur de @ Dennis.
la source
Pyth - 10 octets
Manque de mémoire très rapidement.
Essayez-le en ligne ici .
Réponse raisonnable pour 16 octets:
fsm.A}RQ*Md./PTE
la source
Mathematica, 85 octets
Contribution
la source
{d,s}Min@Select[Flatten[1##&@@(s^#)&/@0~Range~9~Tuples~Tr[1^s]],#>=d&]
U+F4A1
, nom long\[Function]
.0~Range~9
semble très conservatrice. Faut-ilg[{2,3,5},1001]
vraiment sauter1024
et revenir1080
? Ce n'est pas une entrée particulièrement importante.Japt , 10 octets
Testez-le en ligne!
Ne fonctionne pas sur le dernier cas de test en raison d'une limite d'itération conçue pour empêcher l'interprète de fonctionner indéfiniment (cela n'a pas beaucoup aidé ici, car il a gelé mon navigateur pendant une heure ...)
Explication
la source
Gelée , 9 octets
O (2 n • longueur (f) ) exécution en et l'utilisation de la mémoire en font une solution théorique.
Essayez-le en ligne!
la source
Haskell , 46 octets
C'est un portage de l'excellente réponse Python de KSab . Merci à Laikoni pour son aide dans le débogage et le golf de cette réponse dans le salon de discussion PPCG Haskell, Of Monads and Men . Suggestions de golf bienvenues! Essayez-le en ligne!
la source
Mathematica, 73 octets
Essentiellement un portage de la réponse Python de Rod . Définit deux opérateurs binaires et . renvoie si est un produit d'éléments de et autrement. donne le plus petit entier
±
·
n±f
True
n
f
False
n·f
i
. Si quelqu'un peut trouver un moyen d'éliminer le test de divisibilité, je pourrais économiser 10 octets en utilisant le codage ISO 8859-1.Explication
la source
R , 52 octets
Essayez-le en ligne!
Cela fait 3 semaines, j'ai donc pensé publier enfin ma propre solution. Il s'agit d'une approche par force brute.
Il existe cependant une fonction intégrée:
R , 5 octets
Essayez-le en ligne!
Depuis les documents R:
Cependant, certains tests ont révélé un bogue dans l'implémentation, comme le montre le lien TIO ci-dessus.
nextn(91,c(2,6))
devrait renvoyer 96, mais renvoie 128 à la place. Cela ne se produit évidemment que lorsqu'ilsfactors
ne sont pas tous relativement premiers les uns avec les autres. En effet, le code C qui le sous-tend révèle quenextn
tente avidement de se diviserfactor
tour à tour jusqu'à ce qu'il1
soit atteint:Cela peut être résolu en prenant les entrées dans l'ordre décroissant.
la source
JavaScript (ES6),
5350 octetsEnregistré 3 octets grâce à @DanielIndie
Prend une entrée dans la syntaxe de curry
(n)(a)
.Cas de test
Afficher l'extrait de code
Comment?
la source