为什么我在实现Eratosthenes筛选时会出现bad_alloc错误

时间:2014-06-19 08:23:01

标签: c++ vector sieve-of-eratosthenes

我正在尝试预先计算所有素数。在使用Sieve of Eratosthenes的1到1000000005的大范围内,但在编译我的代码后得到错误...我认为问题与矢量的大小有关,但是当我使用P.max_size()打印出来时,我没有。比我的限制更大,我认为最大限制仍未达到,但我仍然坚持这个错误。 请帮帮我

我将所有素数保存为1并在向量中保持为0

#include<iostream>
#include<cmath>
#include<cstdio>
#include<vector>
using namespace std;

int main()
{
  long long i,j;
  vector<int>P;
  P.reserve(1000000005);
  for(i=0;i<=1000000;i++)
  {
    P.push_back(1);
  }
 P[0]=0;
 P[1]=0;

for(i=2;i<=sqrt(1000000);i++)
{
  if(P[i]==1)
  {
     for(j=2;i*j<=100000;j++)
       P[i*j]=0;
  }
}

long long T,N,M;
scanf("%lld",&T);

while(T--)
{
 scanf("%lld %lld",&N,&M);
   for(i=N;i<=M;i++)
    {
      if(P[i]==1)
      printf("%lld\n",i);
    }
    printf("\n");
  }
 return 0;
}

1 个答案:

答案 0 :(得分:0)

P.max_size()表示向量的大小,这与在特定时刻可用/可分配的内存量有很大不同。 bad_alloc运算符无法满足给定大小内存的分配请求时,抛出new异常。正如@Mats指出的那样,在您的平台中,分配失败了。