В настоящее время ваша проблема не ограничена во времени. Дело в том, что ваша программа никогда не печатает никаких чисел.
Самая очевидная ошибка заключается в том, что в fast_prime вы проверяете, делится ли n на простые [0], простые [1], ... до простых [k]. Даже если n простое, вы не будете его печатать, потому что n где-то в простых числах [], и вы получите, что n делится на некоторое число ...
Чтобы исправить это, вам нужно проверить, что n делится на некоторое простое число вплоть до квадратного корня из n (это также будет иметь побочный эффект ускорения кода, так как меньшее число будет проверено перед принятием решения о некотором числе). простое число)
изменить fast_prime на
inline void fast_prime(int n)
{
int j;
int rootofn;
rootofn = sqrt(n);
for (int i = 0; ((j = primes[i]) > -1) && (j<rootofn); i++) {
if (!(n % j)) {
return;
}
}
printf("%d\n", n);
}