Estoy tratando de hacer una pregunta Project Euler.Necesita ayuda para optimizar el algoritmo - suma de todos los números primos por debajo de dos millones
Estoy buscando la suma de todos los números primos por debajo de 2,000,000.
Esto es lo que tengo ...
int main(int argc, char *argv[]) {
unsigned long int sum = 0;
for (unsigned long int i = 0; i < 2000000; i++) {
if (isPrime(i)) {
sum += i;
}
}
printf("sum => %lu\n", sum);
}
int isPrime(int num) {
if (num < 2) {
return 0;
}
for (int i = 2; i < num; ++i) {
if (num % i == 0) {
return 0;
}
}
return 1;
}
Se lleva mucho tiempo, para ejecutar, por lo tanto, no satisface la regla de un minutos a de tiempo de ejecución para los problemas de Euler.
Cuando lo ejecuto con el límite de 10, obtiene la respuesta correcta, 17
como en la pregunta.
Supongo que hay algún algoritmo que puede reducir el trabajo realizado. El problema es que no sé qué es.
¿Puede alguien señalarme en la dirección correcta?
Gracias.
posible duplicado de [forma más elegante para generar números primos] (http://stackoverflow.com/questions/1042902/most-elegant-way-to-generate-prime-numbers) –
esto no es realmente Específico del lenguaje C: tiene más que ver con la generación de números primos en general. –
@Billy ONeal Gracias, verificare esa pregunta. – alex