문제점에 대한 내 대답 PRIME1 제 설명을 잘못 입력 했습니까? 세그먼트 오류가 발생했습니다. 여기spoj의 PRIME1에서 세그먼트 화 오류가 발생합니다. 어떻게 그것을 근절해야합니까?
그것이 :
#include<cstdlib>
#include<iostream>
using namespace std;
int main(int argc, char** argv) {
int t=0,i=0,m=0,n=0;
cin>>t;
while(t--&&t<=10)
{
cin>>m>>n;
if(m>=1&&n-m<=100000)
{
int prime[n];
for(i=0;i<n;i++)
prime[i]=1;
for (int i=2; i*i<=n; i++)
{
if (prime[i] == true)
{
for (int j=i*2; j<=n; j += i)
prime[j] = false;
}
}
for (int k=m+1; k<n; k++)
if (prime[k])
cout <<k<<endl;
}
}
return 0;
}
이 버그를 일으키는 것입니다
'int prime [n];'이 너무 커서 스택에 맞지 않을 수 있습니다. 그것은'char * prime = new char [n];'과 같은 것이어야합니다. 그것을 사용한 후에 반드시 [삭제]하는 것을 잊지 마라. (나는 이것을 제출하여 이것을 체크하지 않았기 때문에 대답으로 게시하지 않을 것입니다.) – MikeCAT
'bool prime'은 공간을 덜 차지할 수 있습니다. 'std :: vector'는 훨씬 적은 공간을 차지 하겠지만, SPOJ에서는 그다지 도움이되지 않는 퍼포먼스 히트가 있습니다. –
user4581301
확실하지 않은 이유가 여기에 있습니다. 아마도 나는 학교 교육이 필요합니다 ... – user919426