Euler 10 - solucionado

Hoy me dispuse a vencer mi gran reto, por darle un nombre, y es el problema número 10 de projecteuler.net, el cual dice lo siguiente:

/*
* The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.
*
* Find the sum of all the primes below two million.
*
*/

Sabiendo eso me puse manos a la obra y saqué mi primer "cosa", la cual hace lo que tiene que hacer, pero no en el tiempo que debería. Tarda minutos en hacerlo, aunque ya vi una forma de eficientarlo, siendo por problemas de tiempo uno de esos tantos pendiendes que me aquejan.

Dejo el código, y en algún momento publicaré su mejora:



/*
* The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.
*
* Find the sum of all the primes below two million.
* Resultado: 142913828922, 142913828922
* Tiempo:real    92m6.960s
*        user    91m43.731s
*         sys    0m0.019s

*
*/

#include

int lim = 2000000;

//Definición de función
int isPrime(unsigned long long num);


//Entrada principal
int main(int argc, char *argv[]) {



unsigned long long int tmp=0;

for(int i=1; i<=lim; i++) { 
 tmp+=isPrime(i); 
 } 
 printf ("Numero: %llu \n", tmp); 
 return 0; }
 /* * Valida si el número en curso es primo * * */ 
int isPrime(unsigned long long int num) { 
int residuo=0; int contadorCeros=0; f
or(int j=1; j<=num; j++) { 
residuo=num%j; 
 /*printf ("debbug: num=%d, j=%d, residuo=%d ", num, j, residuo);*/
 if(residuo == 0) {
 contadorCeros+=1;
 if(contadorCeros >3)
 break;
}
/* printf("contador: %d \n", contadorCeros);*/

}

if(contadorCeros == 2)
{
/*printf("Es primo el número: %d \n", num);*/
return num;
}
return 0;
}


Comentarios

Publicar un comentario

Entradas populares