17 de marzo de 2012

Numero 10001 primo (Coding Dojo) con Groovy



Hace algunos dias me tope con un codigo dojo de nuestros amigos mexicanos 
El problema era el sgte (tomado del project euler):By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.What is the 10001st prime number?

Lo resolví lo mejor que pude utilizando como herramienta Groovy, tengo que señalar que utilice algunos trucos de programación funcional pero en realidad es un poco lento (para este tipo de trabajos) seguramente lo explicare en otro articulo,pero si es que están anciosos y quieren saber mas sobre programación funcional este es un buen articulo.

Sin mas preambulo les dejo con mi solución (utilizando grooovy)

def numeroPrimo = { numIni,numFin ->
    Integer contPrim = 1
    while(contPrim < numFin){
        numIni++
        if (evaluarPrimo(numIni))
            contPrim++
    }        
    return numIni                
}
def evaluarPrimo = { num -> 
     (2..Math.sqrt(num)).every { num % it != 0 } 
}
println "numero: " + numeroPrimo.call(1,10001)

RPTA:104743
El tiempo que me toma es menor a 15 segundos

Si es que tienen alguna mejora por favor envíenla.

No hay comentarios: