我无法找到为什么以下代码显示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;
}