我正在尝试预先计算所有素数。在使用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;
}
答案 0 :(得分:0)
P.max_size()
表示向量的大小,这与在特定时刻可用/可分配的内存量有很大不同。 bad_alloc
运算符无法满足给定大小内存的分配请求时,抛出new
异常。正如@Mats指出的那样,在您的平台中,分配失败了。