为什么我会为此代码获取SIGABRT? (SPOJ上的PRIME1)

时间:2013-12-25 08:06:11

标签: c++ sigabrt

我试图在SPOJ上解决这个问题。

http://www.spoj.com/problems/PRIME1/

我得到SIGABRT或SIGKILL。出了什么问题?它在我的编译器(CodeBlocks)上运行正常。

我正在使用标准的Erastosthenes算法筛选。

//finding if a number is prime or not
bool is_Prime(int num)
{
    if ( num <= 1)
        return false;

    int upper_limit = sqrt(num);

    for( int i = 2; i <= upper_limit ; ++i)
        if( num % i == 0)
            return false;

    return true;
}

bool is_prime_array [ 1000000000 ];

void sieve_of_erastosthenes( int MAX )
{
    is_prime_array[1] = false;

    for(int i=2; i <= MAX ; ++i )
        is_prime_array[i]=true;

    int upper_limit = sqrt(MAX);

    for(int i = 2 ; i <= upper_limit ; ++i)
        if ( is_Prime(i) )
            for ( int j = i*i ; j<=MAX ; j += i)
                is_prime_array[j]= false;
}

int main()
{


    int T, left, right;

    cin.sync_with_stdio(false);

    cin>>T;

    while ( T-- )
    {
        cin >> left >> right;

        sieve_of_erastosthenes( right );

        for(int i = left ; i <= right ; ++i )
            if(is_prime_array[i] == true )
                cout<<i<<endl;
    }
    return 0;
}

1 个答案:

答案 0 :(得分:0)

可能是因为你的is_prime_array需要1GB的内存。

此外,它不是Eratosthenes的筛子。