El número de Mersenne 47 en Haskell
En el artículo Cruce de listas abordamos el tema de la simplicidad y eficiencia de las soluciones. En este artículo deseo mostrar la capacidad de Haskell para calcular con grandes números enteros. Para ello, he elegido calcular el último primo de Mersenne descubierto.
Los números primos de Mersenne son los primos de la forma . El último primo de Mersenne descubierto es
que es un número con más de 12 millones de cifras. El descubrimiento lo realizó Edson Smith el 23 de agosto de 2008. Dicho número es el 47 primo de Mersenne conocido.
Para calcular con Haskell el valor de , escribimos en el fichero mersenne.hs su definición
1 |
main = print (2^43112609-1) |
A continuación, compilamos el fichero
1 2 3 |
> ghc -O2 --make mersenne.hs [1 of 1] Compiling Main (mersenne.hs,mersenne.o) Linking mersenne ... |
Finalmente, lo ejecutamos obteniendo el tiempo de ejecución y
escribiendo el número en el fichero mersenne.txt
1 2 3 4 5 |
> time ./mersenne > mersenne.txt real 2m27.802s user 2m26.945s sys 0m0.576s |
El fichero con el número puede leerse aquí.
Como se puede observar, el cálculo ha sido simple y eficiente.
Otra problema más difícil es comprobar que el número obtenido es primo.
Sería interesante comparar el cálculo de en otros lenguajes. Todas las soluciones alternativas serán bienvenidas e incorporadas a este artículo.