Un par divertido de equivalencias es 1 + 5 = 2 · 3 y 1 · 5 = 2 + 3 . Hay muchos como estos, otro es 1 + 1 + 8 = 1 · 2 · 5 y 1 · 1 · 8 = 1 + 2 + 5 . En general, un producto de n enteros positivos es igual a una suma de n enteros positivos, y viceversa.
En este desafío, debe generar todas esas combinaciones de enteros positivos para una entrada n> 1 , excluidas las permutaciones. Puede generarlos en cualquier formato razonable. Por ejemplo, todas las soluciones posibles para n = 3 son:
(2, 2, 2) (1, 1, 6)
(1, 2, 3) (1, 2, 3)
(1, 3, 3) (1, 1, 7)
(1, 2, 5) (1, 1, 8)
El programa que puede generar la mayor cantidad de combinaciones para la n más alta en un minuto en mi 2 GB de RAM , la computadora portátil Intel Ubuntu de 64 bits gana. Si su respuesta usa más de 2GB de RAM o está escrita en un idioma que no puedo evaluar con software disponible gratuitamente, no calificaré su respuesta. Probaré las respuestas dentro de dos semanas y elegiré el ganador. Más tarde, las respuestas no competitivas todavía se pueden publicar, por supuesto.
Como no se sabe cuáles son los conjuntos completos de soluciones para todas las n , puede publicar respuestas que generen soluciones incompletas. Sin embargo, si otra respuesta genera una solución (más) completa, incluso si su n máximo es menor , esa respuesta gana.
Para aclarar, aquí está el proceso de puntuación para decidir el ganador:
Probaré su programa con n = 2, n = 3, etc. Guardo todas sus salidas y me detengo cuando su programa tarda más de un minuto o más de 2 GB de RAM. Cada vez que se ejecuta el programa para una entrada dada n, se terminará si lleva más de 1 minuto.
Miro todos los resultados para todos los programas para n = 2. Si un programa produjo soluciones menos válidas que otro, ese programa se elimina.
Repita el paso 2 para n = 3, n = 4, etc. El último programa en pie gana.
fuente
Respuestas:
C (gcc) , n = 50000000 con 6499 resultados en 59 s
Para evitar producir más de un terabyte de salida que consiste casi por completo en 1s, una secuencia de (digamos) 49999995 1s se abrevia como
1x49999995
.Pruébalo en línea!
fuente
Mathematica, n = 293 con 12 soluciones
OP cambió el desafío y pide entrada
Aquí está el nuevo código que toma cualquier n como entrada
Para n = 293 obtienes las 12 soluciones
entrada
Puede probar este algoritmo en Wolfram Sandbox, que es un software disponible en línea de forma gratuita.
Simplemente siga el enlace, pegue el código (ctrl + v), pegue la entrada al final del código y presione shift + enter para ejecutar.
Obtendrás todas mis soluciones en segundos
Aquí también está ¡ Pruébalo en línea!en C ++ (gcc)
(Muchas gracias a @ThePirateBay por apoyar y traducir mi código a un idioma libre)
este programa genera solo soluciones de la forma {a, b, c} {a, b, c}
que significa a + b + c = a * b * c
Se tarda 1 segundo en calcular
Las doce soluciones son:
fuente
Python 2 , n = 175, 28 resultados en 59s
Lo hizo un poco más lento usando un factor de reducción 2, pero obtiene más soluciones comenzando con n = 83
Obtengo resultados para n hasta 92 en TIO en una sola ejecución.
Pruébalo en línea!
fuente
Ruby , n = 12 obtiene 6 soluciones
Al menos en TIO, resultados habituales para 1 hasta 11
Pruébalo en línea!
Obtiene 10 resultados en menos de un minuto para n = 13 en mi computadora portátil.
fuente
Mathematica, n = 19 con 11 soluciones
esta es mi nueva respuesta según los nuevos criterios de OP
si da una entrada [n] al final, el programa muestra las soluciones
Aquí están mis resultados (en mi vieja computadora portátil de 64 bits a 2.4GHz)
fuente
Haskell, muchas soluciones rápidas
f
calcula las soluciones, lamain
función agrega obtener la entrada de la línea de comando y algo de formato y recuento.fuente
ghc -O3 -o prodsum prodsum.hs
y ejecute con el argumento de la línea de comandos:./prodsum 6
Haskell , n = 10 con 2 soluciones
Esto funciona como una mierda, pero al menos lo arreglé, así que en realidad estoy abordando el desafío ahora.
Pruébalo en línea!
fuente
Axioma, n = 83 en 59 segundos aquí
resultados:
La forma de ejecutar el texto anterior en Axiom sería copiar todo ese texto en un archivo, guardar el archivo con el nombre: Name.input, en una ventana de Axiom use ") read absolutepath / Name".
resultados: (# f (i) encuentra la longitud de la matriz f (i), es decir, el número de soluciones)
fuente