当限制为2082192或更高时,由于某种原因,这会崩溃。 为什么,以及如何提高此限制?数字2082192是否会响铃?
它似乎仅在我的机器上出现问题 - 它在Ideone.com上运行良好
我正在使用MinGW和Code :: Blocks以及-std = c ++ 11,但是在玩这些设置并且我无法修复它。
任何帮助将不胜感激!
#include <iostream>
#include <math.h>
#include <time.h>
#define limit 2082192
int main()
{
float time_start = clock();
bool bucket[limit];
float root = sqrt(limit);
for (unsigned int i = 1; i <= limit; ++i)
bucket[i] = true;
for (unsigned int i = 2; i <= root; ++i)
for (unsigned int j = i*2; j <= limit; j+=i)
bucket[j] = false;
unsigned int primes = 0;
for (unsigned int i = 2; i <= limit; ++i)
if (bucket[i] == true)
++primes;
float time_taken = clock() - time_start;
std::cout << "Primes found: " << primes << " up to " << limit << " in " << time_taken;
return 0;
}
答案 0 :(得分:0)
问题必须是有限的堆栈大小。
在Linux上,你可以修改它输入
$ ulimit -s unlimited
在您从中调用此程序的终端。
在Windows上,您可以使用-Wl,--stack=67108864
编译标志调整堆栈大小,其中数字是预期的大小(以字节为单位)。