Простое изменение покажет вам, как быстро работает ваша программа и сколько работы она должна выполнить. Легко распечатать свой статус примерно каждые 100 итераций. (Или вы можете установить его на 1000, или 10000 итераций.)
Признайте, что вы могли бы DOUBLE скорость вашего цикла в IsPrime
.
После того, как вы проверите 2, вам нужно только проверить нечетные числа, и может быть с i+=2
вместо i++
.
Если вы обеспокоены скоростью, почему вы тратите столько времени на проверку четных чисел? (обратите внимание, что, как только вы начинаете делать только нечетные-номера, вам также необходимо изменить тест на выходе быть нечетное число)
Вы можете DOUBLE скорость выполнения цикла в main
, а также путем избегая даже номера там. (опять же, у вас есть специальный случай 2, затем используйте i + = 2, начиная с 3, чтобы получить 3, 5, 7, 9 ....)
Сделав петлю в IsPrime
, выполните в два раза быстрее, и сделав петлю в main
, выполняйте в два раза быстрее, это должно ускорить вашу программу 4X. (Если это было бы принимать за час до этого, теперь это будет 15 минут.)
Другие улучшения большой скорости вы могли бы сделать это только запустив цикл в sqrt(num)
вместо num
Поскольку я ненавижу приносить функции с плавающей запятой, такие как sqrt
, я вместо этого предлагаю приблизительное приближение, которое остановится в течение 100 итераций прохождения границы sqrt, а также будет регулярно обновлять статус.
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. Я поместил этот код в проект C# (незначительный портирование). Конечно, теперь это было запущено на 64-битной ОС с лучшим компилятором и 2,8 ГГц процессором.
Прошло менее 20 секунд.
«старый компилятор Turbo C++» 1. ПОЧЕМУ ОН ПОЧЕМУ ОН ПОЧЕМУ ОН ПОЧЕМУ? 2. Разве это не C++, а не вопрос C? –
Epic: #define TWO_MILLION 2 * 1000 * 1000 – karlphillip
5 минут ?? Ой !! –