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;
}
Perdonar la identación, pero el wyswyg no es muy amigo de mi FF.
ResponderEliminar