Un simple cambio le mostraría qué tan rápido se está ejecutando su programa y cuánto trabajo tiene que hacer. Es fácil imprimir su estado alrededor de cada 100 iteraciones. (O usted puede configurarlo a 1000 o 10000 iteraciones.)
Reconocer que usted podría DOBLE la velocidad de su bucle en IsPrime
.
Después de marcar 2, solo necesita verificar los números impares, y podría avanzar con i+=2
en lugar de i++
.
Si le preocupa la velocidad, ¿por qué pasa tanto tiempo revisando números pares? (tenga en cuenta que una vez que empiece a hacer sólo números impares, también es necesario cambiar la prueba de salida a ser un número impar)
Se pueden ingresar DOBLE la velocidad del bucle en main
así por evitando también los números pares ahí. (otra vez, tiene que usar el caso especial 2, luego use i + = 2, comenzando en 3 para obtener 3, 5, 7, 9 ...)
Al hacer que el ciclo en IsPrime
corra dos veces más rápido, y haciendo que el ciclo en main
funcione dos veces más rápido, esto debería hacer que su programa sea 4X más rápido. (Si hubiera llevado una hora antes, ahora que va a ser de 15 minutos.)
La otra gran mejora de velocidad se podría hacer solamente está ejecutando el bucle para sqrt(num)
, en lugar de num
Como odio traer funciones de punto flotante, como sqrt
, en su lugar, sugiero una aproximación cercana que se detendrá dentro de las 100 iteraciones para pasar el límite sqrt, y también mostrar actualizaciones de estado regularmente.
if (num%2 == 0)
{
flag=0;
return flag;
}
/* Now that we checked 2, we only need to check odd numbers from now on. */
for(i=3;i<num;i+=2)
{
if (i%101 == 0)
{
printf("i is %d out of %d\n", i, num);
if (i*i > num)
{
break; /* If you pass the sqrt boundary, quit. */
}
}
if(num%i==0)
{
flag=0;
break;
}
}
P. S. Pongo este código en un proyecto de C# (transferencia menor). De acuerdo, ahora se ejecutaba en un sistema operativo de 64 bits, con un mejor compilador y una CPU de 2,8 GHz.
Se ejecutó en menos de 20 segundos.
"viejo compilador de Turbo C++" 1. ¿POR QUÉ OH POR QUÉ OH POR QUÉ OH POR QUÉ? 2. ¿No es eso una C++, no una pregunta C? –
Epic: #define TWO_MILLION 2 * 1000 * 1000 – karlphillip
5 minutos ?? ¡¡Ay!! –