codechef中的Sigabrt错误

时间:2014-09-13 16:50:09

标签: c++ sigabrt

我无法找到为什么以下代码显示sigabrt错误。即使将限制更改为10后错误仍然存​​在。它似乎在我的电脑上正常工作。是因为记忆过度使用。如果是这样我在哪里使用太多内存?

#define limit 100000

using namespace std;
vector<bool> sieve;
void calcSum()
{

    int crosslimit = sqrt(limit);
    sieve.resize(limit,true);
    sieve[0] = true;
    sieve[1] = true;
    for(int i = 2; i < limit; i++)
        sieve[i]=false;

    for (int i = 4; i < limit; i += 2)
        sieve[i]=true;

    for (int i = 3; i < crosslimit; i += 2)
        if(sieve[i] == false)
            for (int j = i*i; j < limit; j += 2*i)
                sieve[j]=true;
    return;
}

int main(int argc, char const *argv[])
{
    calcSum();
    int n;

    cin>>n;
    for (int i = 0; i < n; ++i)
    {
        string str;
        cin>>str;
        if(str.length()<18)
        {
            long long num=stol(str);
            int l=1;
            long long temp=num;
            std::vector<int> v;
            int sqrtofnum=sqrt(num);
            for(int j=2; j<limit && j<=temp && j<sqrtofnum && j<limit;j++)
            {
                if( sieve[j] == false )
                {
                    while(temp%j==0 && temp!=0)
                    {
                            l++;
                            temp=temp/j;
                        v.push_back(j);
                    }
                }
            }

            if(temp==1)
                cout<<l-1<<"\n";
            else
                cout<<l<<"\n";

            for(int j=0; j<v.size(); j++)
                cout<<v[j]<<"\n";               

            if(temp!=1)
                cout<<temp<<"\n";           
        } else {
            cout<<"1\n"<<str<<"\n";
        }
    }

    return 0;
}

0 个答案:

没有答案