C++ 当我想要素数大于1000000时,下面的素数生成器代码显示了一个错误。为什么?

C++ 当我想要素数大于1000000时,下面的素数生成器代码显示了一个错误。为什么?,c++,primes,C++,Primes,当我想要素数大于1000000时,下面的素数生成器代码显示了一个错误。为什么?? 起初,它似乎发生在int的b'cuz,所以我将它改为long,但错误仍然存在。。。。 从技术上讲,这不是一个错误,程序运行后会显示消息“primegen.exe已停止工作” #包括 使用名称空间std; int main() { 长整数a,c,k,d; k=0; cin>>a; cin>>d; 长整数b[a]; b[a-1]=0; 对于(long int i=2;i定义静态数组在这种情况下是不起作用的,因为您不允许

当我想要素数大于1000000时,下面的素数生成器代码显示了一个错误。为什么?? 起初,它似乎发生在int的b'cuz,所以我将它改为long,但错误仍然存在。。。。 从技术上讲,这不是一个错误,程序运行后会显示消息“primegen.exe已停止工作”

#包括
使用名称空间std;
int main()
{
长整数a,c,k,d;
k=0;
cin>>a;
cin>>d;
长整数b[a];
b[a-1]=0;

对于(long int i=2;i定义静态数组在这种情况下是不起作用的,因为您不允许在C++中声明这样长的静态数组; 你可能想试试

int *b = new int [a];
动态声明数组大小(即数组大小将在运行时决定)。代码应一直工作,直到变量“a”超过int的范围(–2147483648到2147483647)。

代码太慢了,几乎是二次编码。在ideone上达到1百万字节:290秒


修复后,通过将
的内部循环条件从更改为(…;jIn您要输入哪个变量
1000000
?如果它是
a
,那么您可能有堆栈溢出。是的,我正在将它存储在…中,所以为什么在arraySorry中不允许这样做,但是为动态数组建议除std::vector之外的任何内容都没有真正的帮助。嘿,如果您想找到素数(就像你的情况一样)此外,Will Ness提出的方法来自这样一个事实:对于一个复合数,因子成对存在——数小于或大于给定数的平方根——或者如果数的平方根是整数,则两者都等于平方根。因此,要找到素数,只需检查该数的平方根,如下所示根据您的建议,我尝试了erastothenes筛选。代码现在更快,编译不会出错,但对于大于100000000的数字,其执行时间仍然超过5个seocnds。还有1个建议。如果使用任何其他方法,请使用bool数组,因为它会更节省空间。似乎这就是答案(堆栈中的1M int在我的sys上不是问题)你能给我一个更好的方法来解决这个问题吗
int *b = new int [a];