C++ 连续运行时错误

C++ 连续运行时错误,c++,C++,请任何人帮我解释一下为什么我的代码会给出运行时错误:我是 无法找到任何错误 这些程序的目的是使用筛子查找素数,并为每个数n查找最小的素数因子 对于足够大的i(这里我在i=46349时得到错误),n在1范围内,内部循环导致错误:j初始化为i(=46349),然后条件(j*i)您尝试过使用调试器吗?它应该可以帮助您找到崩溃的地方实际上我在ide上编译它,它显示运行时错误。编译不会显示运行时错误。你得到了什么错误?我没有使用任何调试器。我只是在ideone.com上运行它,它显示运行时错误,然后通过调

请任何人帮我解释一下为什么我的代码会给出运行时错误:我是 无法找到任何错误

这些程序的目的是使用筛子查找素数,并为每个数n查找最小的素数因子


对于足够大的
i
(这里我在
i=46349
时得到错误),n在1范围内,内部循环导致错误:
j
初始化为
i
(=46349),然后条件
(j*i)您尝试过使用调试器吗?它应该可以帮助您找到崩溃的地方实际上我在ide上编译它,它显示运行时错误。编译不会显示运行时错误。你得到了什么错误?我没有使用任何调试器。我只是在ideone.com上运行它,它显示运行时错误,然后通过调试器运行它。除非你告诉我们问题出在哪里,否则我们帮不上忙。谢谢。我明白了。我把I和j都改成了long,long,谢谢。。Cheers@shooter_buster吸血鬼提供了另一个帮助。你认为你的问题对未来的研究有什么帮助?请详细说明。在
for
循环之前,将
sqrt(MAX)
计算成一个常量变量可能会加快程序的速度。@ThomasMatthews谢谢。我只是不假思索地写得太快了。如果我在
for
中编写
sqrt
,我想知道编译器是否可以优化它,这取决于编译器的优化级别。首先编译,不进行优化,并打印程序集列表。接下来,将优化级别设置得更高(或最高),并打印部件列表。比较两个汇编语言列表。真相在于汇编语言。
#include<iostream>
#include<vector>
#include<cmath>
#include<cstdio>
#include<cstring>
typedef long long ll;
#define MAX 10000000

using namespace std;



bool arr[MAX+1]={false};
int sp[MAX+1]={0};





void Sieve(){
for (int i = 2; i <= MAX; i=i+2)    
{sp[i] = 2;
}
for (int i = 3; i <= MAX; i=i+2)
{
    if (arr[i]==false)
    {
        sp[i] = i;

        for (int j = i; (j*i) <= MAX; j=j+2)
        {
            if (arr[j*i]==false)
            {

                arr[j*i] = true;
                sp[j*i] = i;

            }
        }
    }
}
}




//inline int scan_d()    {int ip=getchar_unlocked(),ret=0,flag=1;for(;ip<'0'||ip>'9';ip=getchar_unlocked())if(ip=='-'){flag=-1;ip=getchar_unlocked();break;}for(;ip>='0'&&ip<='9';ip=getchar_unlocked())ret=ret*10+ip-'0';return flag*ret;}


int main()
{


Sieve();

return 0;    

}
int sqrtMAX=sqrt(MAX);
// write it globally or somewhere before the looping.
// thanks to @Thomas Matthews
...
for (int i = 3; i <= sqrtMAX/*instead of MAX*/ ; i=i+2)
    if (arr[i]==false)
        {
...