Un niño curioso utiliza un programa que puede factorizar un número o una expresión en la forma siguiente: p1^e1 * p2^e2 * ... * pn^en
. Los exponentes iguales a 1
se omiten, por ejemplo360 = 2^3 * 3^2 * 5
El niño escribe esta salida en el programa como una nueva entrada, pero no entiende el ^
signo, por lo que a veces omite uno o más de los que concatenan la base principal y el exponente correspondientes. P.ej(360 =) 2^3 * 3^2 * 5 => 2^3 * 32 * 5 (= 1280)
Debido a estos errores, puede obtener una factorización diferente que puede ingresar nuevamente (omitiendo 0 o más ^
). Repite el proceso hasta que la factorización ya no cambie (tal vez no haya más ^
o haya copiado la salida correctamente).
Debería escribir un programa o función que, dado un número entero n
( n>1
), muestre todos los números posibles en orden creciente cuya factorización podría ser aquella con la que terminó el niño (incluido n
). Por ejemplo, para la entrada 16
las posibles factorizaciones finales son(16 =) 2^4, (24 =) 2^3 * 3, (23*3 =) 3 * 23
Detalles de entrada:
- la entrada es un número entero más grande que
1
- no se dará ninguna entrada que genere un número de salida mayor que
2^31-1
- no se dará ninguna entrada que genere más que
1000
números de salida
Detalles de salida:
- una lista de enteros en una forma conveniente para su idioma
Ejemplos:
Entrada => Salida
11 => 11
16 => 16 24 69
360 => 140 360 770 1035 1219 1280 2875 3680
605 => 560 605 840 2415
2048 => 211 2048
58564 => 230 456 1311 2508 9975 12768 13794 20748 58564 114114 322102
Este es el código de golf, por lo que gana el programa más corto.
Respuestas:
CJam - 66
Pruébalo en http://cjam.aditsu.net/
Explicación:
(*) Gracias Martin
fuente
^
's podría eliminarse en un solo paso. Entonces, para58564 = 2^2 * 11^4
poder generar2508 = 22 * 114
.Rubí, 219
Para comenzar esto:
Crea una función que devuelve una Matriz de números.
https://ideone.com/iOMGny
Úselo así:
Muy divertido escribir todo esto en un teléfono móvil ...
fuente
Perl, 193 bytes
Se acaban de agregar nuevas líneas para facilitar la lectura.
El bucle for factoriza el siguiente número (
$x
) en un hash (%f
) de primos y potencias. La función recursiva (R
) utiliza este hash para generar todos los números que se pueden obtener al eliminar los^
signos. Estos números se agregan a una cola (@q
), y el proceso se repite con el ciclo while externo. Cada número de la cola también se mantiene en una matriz única y ordenada (@r
) para imprimir.fuente
Pyth,
464544Pruébalo aquí.
Arreglado el múltiple
^
corrigió error . Por ejemplo:Tenga en cuenta que este código se basa en un par de correcciones de errores en el compilador oficial que se enviaron después de la pregunta. Sin embargo, no utiliza ninguna función de lenguaje nueva.
fuente
u
era imposible usar un reduce ( ) dentro de otro reducir. Cambié un 2 a un 3 en la ubicación adecuada para que reducir tomara 3 entradas en lugar de 2. Eso es todo.