我正在解决的问题是PRIME1,它表示打印2个数字之间的所有素数。尽管我编写的代码在最糟糕的情况下在我的编译器上正常运行,但在SPOJ中编译时它会给我一个SIGSEV错误。这是代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{
int t;
cin>>t;
while(t>0)
{
int a,b,n,p;
cin>>a>>b;
n = b-a;
bool prime[n+1];
memset(prime,true,sizeof(prime));
for(p=2;p*p<=b;p++)
{
if(prime[p]==true)
{
for(int i=p*2;i<=b;i+=p)
{
prime[i]=false;
}
}
}
(a==1)?p=2:p=a;
for(p;p<=b;p++)
if(prime[p])
cout<<p<<endl;
t--;
}
}