为什么我在实现Eratosthenes的Sieve时得到bad_alloc错误

Why am I getting bad_alloc error while implementing Sieve of Eratosthenes

本文关键字:bad 错误 alloc Sieve 实现 Eratosthenes 为什么      更新时间:2023-10-16

我正在尝试预先计算所有素数。在从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("%lldn",i);
    }
    printf("n");
  }
 return 0;
}

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