Dado un número entero positivo n> 1, determine cuántos números se pueden formar sumando números enteros mayores que 1 cuyo producto sea n . Por ejemplo, si n = 24 podemos expresar n como producto de las siguientes maneras
24 = 24 -> 24 = 24
24 = 12 * 2 -> 12 + 2 = 14
24 = 6 * 2 * 2 -> 6 + 2 + 2 = 10
24 = 6 * 4 -> 6 + 4 = 10
24 = 3 * 2 * 2 * 2 -> 3 + 2 + 2 + 2 = 9
24 = 3 * 4 * 2 -> 3 + 4 + 2 = 9
24 = 3 * 8 -> 3 + 8 = 11
Podemos obtener los siguientes números de esta manera:
24, 14, 11, 10, 9
Eso es un total de 5 números, por lo que nuestro resultado es 5.
Tarea
Escriba un programa o función que tome n como entrada y devuelva el número de resultados que se pueden obtener de esta manera.
Esta es una pregunta de código de golf , por lo que las respuestas se puntuarán en bytes, con menos bytes mejor.
2,2,3,3 -> 10
,2,6,3 -> 11
,2,2,9 -> 13
,12,3 -> 15
,2,18 -> 20
,36 -> 36
(2*3)+(2*3)=12
debería estar en la lista.Respuestas:
Brachylog , 8 bytes
Pruébalo en línea!
Explicación
No estoy completamente seguro de por qué
~×
solo produce listas con elementos superiores a 1, pero parece que sí, lo que funciona muy bien en este desafío.fuente
Gaia ,
91413 bytesError solucionado al costo de 5 bytes gracias a Jonathan Allan, luego 1 byte de golf.
Pruébalo en línea! o prueba como un conjunto de pruebas
Explicación
fuente
[6 6]
Gelatina ,
11 1514 bytes+4 bytes arreglando un error (¿tal vez una mejor manera?)
-1 byte abusando de la simetría
Un enlace monádico que toma y devuelve enteros positivos
Pruébalo en línea! o ver un conjunto de pruebas
¿Cómo?
Actualizando ...
fuente
Python 2 , 206 bytes
Pruébalo en línea!
Explicación
fuente
Mathematica, 110 bytes
fuente
JavaScript (ES6) 107 bytes
Sin golf:
Casos de prueba:
Mostrar fragmento de código
Para verificar que la función calcule las sumas correctas, podemos generar las claves del objeto en lugar de
t
:fuente
Python 3 , 251 bytes
Pruébalo en línea!
El diseño es básico:
factoriza n en sus factores primos (un factor primo puede aparecer varias veces:)
16 -> [2,2,2,2]
. Esa es la funciónf
.calcule las particiones de la lista de factores primos y multiplique los factores en cada partición. Las particiones se encuentran en /programming//a/30134039 , y los productos se calculan sobre la marcha. Esa es la función
t
.La función final obtiene los productos de cada partición de n y los suma, obtiene el número de valores diferentes.
El resultado para
2310=2*3*5*7*11
es49
.EDITAR : Tal vez necesita solución, pero no tengo tiempo para mirarlo ahora (tengo prisa). Sugerencia: ¿es correcto el resultado
2310=2*3*5*7*11
? No lo creo.EDIT2 : Gran corrección. Véase más arriba. La versión anterior (con errores) era: ¡ Pruébelo en línea!
f
calcula los factores (, con un en(0, n)
lugar de(1, n)
como primer elemento.La lambda divide cada factor en "subfactores" y suma esos "subfactores".
fuente