Búsqueda personalizada

sábado, 18 de septiembre de 2010

Numeros Primos

En una materia de mi carrera Lic. Informática, mi docente nos dio de tarea(reto) calcular los números primos que se encuentran en el rango de mil millones números (100.000.000.000) y generarlo en un archivo.

Cualquiera dirá hallar el numero primo es fácil, si es verdad de echo ya hay algoritmos que te calculan los números primos, pero para un rango de mil millones la cosa se complica.

El reto esta en generarlo en el menor tiempo posible en el lenguaje funcional Haskell.

Mi docente me explico un poco como funciona la criba de Erastotenes, entonces decidí aplicar ese algoritmo para generar los números primos.

Este es mi primer intento para 10 millones de números:



Y obtuve los siguientes resultados

$ time ./Primes

real 1m8.407s
user 1m5.015s
sys 0m0.815s


Con mi código, de entrada no podre superar el reto, entonces me puse a analizar por que tardaba tanto y como podía mejorarlo.

Pude hacer la siguiente mejora para mil millones de números:



$time ./Primos
real 4m59.920s
user 4m40.015s
sys 0m6.015s



Si hacemos una comparación con mi primera versión, logre mejorar bastante ya que para el primero solo calculo para diez millones y para el segundo calculo para mil millones números.

Haciendo cálculos matemáticos 100 * 5 (redondeado al tiempo que tardo para mil millones) = 500 minutos y lo dividimos en 60 minutos, nos dará el siguiente resultado 500/60 = 8.33.

Esto quiere decir que para calcular el rango de mil millones de números tardara 8 horas con 33 minutos.