простое замораживание простого поиска из-за больших целых чисел переполнение стека

Я взял на себя изучение C ++ несколько дней назад. Я только что написал программу для поиска простых чисел, вплоть до введенного пользователем значения, и записи этих значений в файл. Программа отлично работает с числами до порядка 100 000 — 500 000. Но если я попытаюсь перейти на 1 000 000, программа зависнет. Вот мой код:

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
long pp, z,counter,lim,indyCounter;
bool isPrime=false;
ofstream myfile;
myfile.open("E:\\Program Files (x86)\\C++ Programs\\PrimeFinder\\Primes.txt");

cout<<"up to what number would you like to calculate primes? ";
cin>>lim;
cout<<endl;
long ps[lim]; //real-time array of primes

pp=3; //prospective prime
ps[0]=2; //initializing prime array with first prime number
counter=1;
indyCounter=1;

for(int y=1; y<=lim;y++)
{
ps[y]=1;
}

for(int z=0; z<=lim; z++)
{
for(int x=0;x<counter;x++)
{
if(pp%ps[x]!=0)
{
isPrime = true;
}
if(pp%ps[x]==0 && ps[x]!=1)
{
isPrime=false;
break;
}
}
if(isPrime)
{
ps[indyCounter]=pp;
indyCounter++;
}
counter++;
pp++;
}

for(int y=0; y<=lim-1;y++)
{
if(ps[y]!=1)
{
myfile<<ps[y]<<endl;
}
}

myfile.close();
return 0;
}

пожалуйста, извините мой код для начинающих, и все советы очень ценятся!
Спасибо,
Стив

2

Решение

Размер стека по умолчанию в Windows составляет всего 8 МБ, а для массива 1000000 long требуется 8 МБ, поэтому вы переполняете стек. Вместо этого вам нужно разместить свой массив в куче.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]