Factorion

propuesto por josejuan

Sabiendo que no hay factoriones mayores que 2.500.000, encontrarlos a todos.

Enunciado
Un factorion, es un número natural tal que, la suma de los factoriales de sus dígitos decimales coincide con él mismo.

Por ejemplo, los dígitos de 3455 son {3, 4, 5, 5} los factoriales de éstos dígitos son {3!, 4!, 5!, 5!} que es {6, 24, 120, 120} y su suma es 270, por tanto el número 3455 NO ES un factorión.

El número 1 sí es un factorión, pues 1! = 1.

No existen factoriones mayores de 2.500.000 ¿podrías encontrarlos a todos?:

1. lo más rapidamente posible.
2. usando la menor memoria posible.
3. usando los menores caracteres posibles.
Preguntas sobre el desafío

¿Tienes dudas sobre el desafío? plantéala aquí

Plantea tu pregunta

14 Soluciones

Dar mi solución

0votos
Factorion en Scala
por

amvieites

hace 6 años

Mi primer desarrollo en Scala. La primera versión tardaba unos 10s pero en esta lo he reducido a poco más de 2,5s precalculando los factoriales y evitando la conversión del número a string para recorrer los dígitos. ¡Se agradece algún comentario!

0votos
Factorion en C
por

josejuan

hace 6 años

Mi versión de Haskell sólo revisa unos 6.300 números. Esta versión de C revisa los 2.500.000 pero es sensiblemente más rápida. Un buen ejemplo en que la constante multiplicativa es importante.

0votos
Factorion en Haskell
por

josejuan

hace 6 años

Esta versión de haskell es muy eficiente, sólo revisa aquellos números que son imágen de la actuación (suma de factoriales de dígitos). Curiosamente, no alcanza la velocidad de la versión de C (posteo luego) ni aunque lo paralelice (es demasiado poco trabajo para sacar ventaja paralelizando).

0votos
Factorion en Haskell
por

drabor

hace 6 años

Como sólo hay 10 factoriales, pongo los resultados literales y así no calculo nada, no se si de esta forma lo consideráis válido. Tarda 22.22 s en el intérprete y 482 ms cuando lo compilo.

0votos
Factorion en C#
por

drabor

hace 6 años

Almaceno los factoriales en un diccionario para no tener que calcularlos de nuevo. Tarda 3100 ms y 800 ms con paralelización. Los resultados son 1, 2, 145 y 40585.

Dar mi solución