Una colección de enteros positivos d_1 d_2 ... d_kes una factorización de un entero positivo nsi
d_1 * d_2 * ... * d_k = n
Cada número entero positivo tiene una factorización prima única , pero en general también tienen factorizaciones en las que algunos de los términos son compuestos. P.ej
12 = 6 * 2 = 4 * 3 = 3 * 2 * 2
Escriba un programa, función, verbo o similar que tome como entrada un solo entero positivo y devuelva o imprima una lista completa de sus factorizaciones distintas. Las factorizaciones pueden producirse en cualquier orden, y sus términos pueden estar en cualquier orden, pero no deben existir permutaciones entre sí. Las factorizaciones pueden no incluir 1con dos excepciones: para la entrada n, puede dar la factorización en n*1lugar de n; y para la entrada 1puede dar la factorización en 1lugar de la lista vacía.
Puede suponer que la entrada estará en el rango de un entero de 32 bits con signo. Si la salida es como una cadena, debe haber una distinción clara entre la delimitación de números dentro de una factorización y la delimitación de las factorizaciones, pero no es necesario (por ejemplo) que los factores se unan con un *.
Su código debe ser capaz de manejar cualquier entrada válida dentro de los 10 minutos en una máquina de escritorio razonable.
Ejemplos
1 [[]]
or [[1]]
or [[1 1]]
7 [[7]]
or [[7 1]]
or [[1 7]]
12 [[12] [6 2] [4 3] [2 3 2]]
or variants
16 [[2 2 2 2] [2 2 4] [2 8] [4 4] [16]]
or variants
901800900 a list of 198091 factorisations
1338557220 a list of 246218 factorisations
fuente

901800900y en1338557220algún lugar donde podamos verificarlas? Mi código me está dando factorizaciones 2048 y 1024 para esos números, respectivamente, y no estoy seguro de por qué.Respuestas:
Haskell, 56 bytes
(2!)(1338557220::Int)imprime en cinco minutos en mi computadora portátil, cuando se compilaghc -O3.Haskell, 62 bytes, pero mucho más rápido.
(2!)(1338557220::Int)imprime en un cuarto de segundo en mi computadora portátil, cuando se compilaghc -O3.fuente
ghcme daParse error: naked expression at top levely meghcidaparse error on input `='(2!)con el programamain = print ((2!) (1338557220::Int)), compile conghc -O3 factor.hsy ejecute con./factor.Pyth, 29 bytes
Pruébalo en línea
Se ejecuta en veinte segundos
1338557220en mi computadora portátil.fuente
pyth factor.pyth(opyth -c 'Msam+Ldgd/Hdf!%HT>S@H2tG]]Hg2'), proporcionando16stdin. Asegúrese de estar utilizando una versión actual de Pyth; implícitoQfue agregado en marzo. Sin embargo, no puedo imaginar cómo podrías obtener la división por cero."lugar de', y bash estaba expandiendo el!%a otra cosa.Python ,
2523133123111451411371351038483 bytesEsto se basa en gran medida en la respuesta Pyth de Anders Kaseorg . Cualquier sugerencia de golf bienvenida. Pruébalo en línea!
Editar: 19 bytes de golf gracias a Dennis. Se corrigió un error tipográfico en el código y se agregó un enlace TIO.
Sin golf:
fuente
**.5se deshace de la importación.JavaScript (ES6), 83 bytes
Solo tomé prestado el truco de raíz cuadrada de @ AndersKaseorg porque terminó ahorrándome bytes en general. Imprime
1una entrada de1, de lo contrario no imprime1s.fuente
Ruby 1.9+,
878987 bytesEsta respuesta se basa en la respuesta Pyth de Anders Kaseorg . Este código solo funciona para versiones posteriores a Ruby 1.9, ya que las lambdas stabby
->solo se introdujeron en 1.9. Cualquier sugerencia de golf es bienvenida.Sin golf:
fuente
g[n/d,d]:wrong number of arguments (0 for 1)->se introdujeron en Ruby 1.9. Editaré la respuesta para mostrar el número de versión requerido.g[n/d,d].g(n/d,d)Es más compatible con versiones anteriores.f[n]se requiere llamar lambdas stabby y Rubdas lambdas en general.f(n)y lasf nllamadas requierendefyend. Más información aquí y aquíJ, 52 bytes
No es tan eficiente como podría ser, ya que algunas factorizaciones pueden repetirse y se debe hacer un pase final después de clasificar cada factorización y luego desduplicar.
Pruébalo en línea! (Pero trate de mantener los valores de entrada pequeños).
En mi escritorio, los tiempos son
Explicación
Este método se basa en generar todas las particiones establecidas para los factores primos del entero de entrada n . El rendimiento es mejor cuando n no tiene cuadrados, de lo contrario se crearán factorizaciones duplicadas.
fuente