SIGSEV SPOJ(PRIME1)

时间:2016-08-23 15:39:23

标签: c++ c++11

我正在解决的问题是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--;
    }
}

0 个答案:

没有答案