Recientemente ha habido muchos desafíos relacionados con la factorización prima / prima, por lo que pensé que podría ser interesante ir para otro lado.
Dado:
- un entero positivo
n, y - una lista no vacía de enteros positivos
f
escribir un programa completo o una función para encontrar el menor entero ital que i >= ny ies un producto de no negativos, potencias enteras de elementos f.
Ejemplos:
Supongamos
n = 11, f = [2, 3, 5].Los primeros productos son:
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^3Supongamos
n=14, f=[9, 10, 7].De nuevo, los primeros productos:
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
Casos de prueba:
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
Reglas
- Puede suponer que
fcontendrá al menos un elemento, y que todos los elementosfserán mayores que 1. - Si lo desea, puede suponer que
festá ordenado en orden decreciente / creciente (pero especifique). - Opcionalmente, puede tomar el número de elementos de
fsi lo desea. - Se permite la salida como una cadena.
- Este es el código de golf , por lo que gana la respuesta más corta en bytes en cada idioma.
- Se aplican las reglas de E / S predeterminadas y las lagunas estándar están prohibidas.
- Se alientan las explicaciones.
fuente

∞guarda3bytes sobre-Log@0 (doesn't work on TIO, but works fine on desktop Mathematica). Also,Tr [1 ^ {##}] `es un byte más corto queLength@{##}.#2es incluso más corto queTr[1^{##}]. :)Quieten su código principal. Esta respuesta genera demasiados mensajes incorrectos. Al menos pregúntele a OP si está de acuerdo con esto∞problema parece ser un error. Trataré de arreglar eso.Python 2 ,
918884 bytesPruébalo en línea!
La función
fverifica recursivamente sines un producto de potencias de elementosl,ges solo un contenedor para controlar la iteraciónfuente
Python, 55 bytes
Pruébalo en línea!
Copió descaradamente el guión de pie de página de Rod para probar
fuente
Jalea , 13 bytes
Un enlace diádico que toma la lista,
fa la izquierda y el númeron, a la derecha que produce un número.Pruébalo en línea! Golfily ineficiente: se agotará el tiempo de espera para entradas con mayor
no mayorduraciónf.¿Cómo?
Sabemos que los poderes de los factores individuales (estrictamente positivos) nunca tendrán que excederse
n-1... ¡así que inspeccionemos todas las formas posibles!
fuente
Retina , 76 bytes
Pruébalo en línea! Link excluye los casos de prueba más lentos, pero aún es un poco lento, así que trate de no martillar el servidor de @ Dennis.
fuente
Pyth - 10 bytes
Se queda sin memoria muy rápidamente.
Pruébelo en línea aquí .
Respuesta razonable para 16 bytes:
fsm.A}RQ*Md./PTEfuente
Mathematica, 85 bytes
Entrada
fuente
{d,s}Min@Select[Flatten[1##&@@(s^#)&/@0~Range~9~Tuples~Tr[1^s]],#>=d&]U+F4A1, nombre largo\[Function].0~Range~9parece muy conservador. ¿g[{2,3,5},1001]Realmente debería saltar1024y regresar1080? Esta no es una entrada particularmente grande.Japt , 10 bytes
¡Pruébelo en línea!
No funciona en el último caso de prueba debido a un límite de iteración diseñado para evitar que el intérprete se ejecute para siempre (no ayudó mucho aquí, ya que congeló mi navegador durante una hora ...)
Explicación
fuente
Jalea , 9 bytes
El tiempo de ejecución de O (2 n • length (f) ) y el uso de memoria hacen de esta una solución teórica.
Pruébalo en línea!
fuente
Haskell , 46 bytes
Este es un puerto de la excelente respuesta de Python de KSab . Gracias a Laikoni por su ayuda en la depuración y el golf de esta respuesta en la sala de chat PPCG Haskell, Of Monads and Men . Sugerencias de golf bienvenidas! Pruébalo en línea!
fuente
Mathematica, 73 bytes
Esencialmente un puerto de la respuesta Python de Rod . Define dos operadores binarios y . devuelve si es un producto de elementos de y de otra manera. da el entero más pequeño . Si alguien puede encontrar una manera de eliminar la prueba de divisibilidad, podría ahorrar 10 bytes utilizando la codificación ISO 8859-1.
±·n±fTruenfFalsen·fiExplicación
fuente
R , 52 bytes
Pruébalo en línea!
Han pasado 3 semanas, así que pensé que finalmente publicaría mi propia solución. Este es un enfoque de fuerza bruta.
Hay, sin embargo, un incorporado:
R , 5 bytes
Pruébalo en línea!
De los documentos R:
Sin embargo, algunas pruebas revelaron un error en la implementación, como se muestra en el enlace TIO anterior.
nextn(91,c(2,6))debería devolver 96, pero devuelve 128 en su lugar. Obviamente, esto solo ocurre cuandofactorsno todos son relativamente primos entre sí. De hecho, el código C subyacente revela que connextnavidez trata de dividir cada unofactora su vez hasta que1se alcanza:Esto se puede resolver tomando la entrada en orden decreciente.
fuente
JavaScript (ES6),
5350 bytesGuardado 3 bytes gracias a @DanielIndie
Toma entrada en la sintaxis de curry
(n)(a).Casos de prueba
Mostrar fragmento de código
¿Cómo?
fuente