如何修复我的程序崩溃?

时间:2018-02-18 21:42:19

标签: c++

我正在编写projecteuler.net的第7个问题的代码,我有点成功,但我需要找到第10001个素数,如果我试图找到更高的数字,我的程序会崩溃2262所以我无法得到我需要的答案。我尝试将int更改为其他数据类型,例如long,但这似乎不是问题,我现在只是卡住了。当我试图超过2262的素数时,我需要做什么才能让我的程序崩溃?

int main()
{
int numbersList[10000], prime[10000], rez;
int where1=1, where=0;
bool remainder;
prime[0] = 2;

for(int i = 2; i < INT_MAX; i++)
{
    numbersList[where] = i;//2
    where++;
    for(int j = 0; j < where1; j++)
    {
        if(i % numbersList[j] != 0)
        {
            remainder = true;
        }
        else
        {
            remainder = false;
            break;
        }
    }
    if(remainder)
    {
        prime[where1] = i;
        where1++;
    }
    if(where1==2262)// Which primary number you want. More or equal to 2263 crashes.
    {
        rez = prime[where1-1];
        break;
    }
}
cout << endl << where1 << " primary number: " << rez << endl;
return 0;
}

1 个答案:

答案 0 :(得分:0)

我认为它有一个小错字 模数运算将使用prime数组而不是numberList数组

完成
int main()
{
int numbersList[1000000], prime[100000], rez;
int where1=1, where=0;
bool remainder;
prime[0] = 2;

for(int i = 2; i < 1000000; i++)
{
    numbersList[where] = i;//2
    where++;
    remainder = true;
    for(int j = 0; j < where1; j++)
    {
        if(i % prime[j] != 0)
        {
            remainder = true;
        }
        else
        {
            remainder = false;
            break;
        }
    }
    if(remainder)
    {
        prime[where1] = i;
        where1++;
    }
    if(where1==10001)//104743
    {
        rez = prime[where1-1];
        break;
    }
}
cout << endl << where1 << " primary number: " << rez << endl;
return 0;
}

我首先运行for循环直到10^6,这足以给出第一个10001st素数。从784891数字有1,000,000个素数。有关素数的详细信息,请参阅此link