Я работал над простым алгоритмом Сита Эратосфена, и его код приведен ниже:
int main()
{
const int n = 1000000;
int sqrn = floor(sqrt(n));
bool primes[n + 1] = { 0 }; // false means prime, true not prime
primes[0] = true;
primes[1] = true;
for (int i = 2; i <= sqrn; i++){
if (primes[i] == false) {
int j = i + i;
while (j<=n-1){
primes[j] = true;
j = j + i;
}
}
}
}
Мой главный вопрос заключается в том, что этот код приводит к ошибке переполнения стека, если я пытаюсь установить массив поиска больше, чем n = 1000000. Я не уверен, что это из-за ошибки программирования или из-за того, что программа не может содержать логический массив размером более 10 ^ 6 записей? Любой совет приветствуется.
Другой второстепенный вопрос, который у меня есть, заключается в том, увеличивает ли скорость выполнения установка вычисления квадратного корня из n вне оператора цикла for.
Спасибо