ds020228   5년 전

어느부분에서 출력초과가 뜨는지 혹은 반례를 알 수 있을까요?

djm03178   5년 전

우선 출력 초과가 뜨는 이유는, arr에 메모리를 할당해 준 후 arr[a] ~ arr[b]까지만 초기화를 하는데 실제로 에라토스테네스의 체를 수행할 때는 arr[2]부터 모두 사용해야 하기 때문에 이 부분이 제대로 수행되지 않아 출력할 때 너무 많은 것들이 출력되었기 때문입니다. 1부터 b까지 모두 초기화를 해줘야 합니다.

그리고 arr의 크기가 b이면 arr[b]는 존재하지 않고 arr[b-1]까지만 사용할 수 있기 때문에 메모리 할당도 sizeof(int) * (b+1)만큼 해줘야 합니다.

ds020228   5년 전

 그런데 int arr[1000001] = { 0, };  전역으로 배열을 선언한 경우에도 출력 초과가 뜹니다. 이 선언이 틀린건가요?

djm03178   5년 전

그렇게 해도 10~16줄은 1부터 다 해줘야 합니다. 예를 들어 a부터만 이를 수행하면 a가 100일 때 2~99는 모두 소수가 아닌 것으로 판단되어 23~24줄이 실행되지 않아 소수가 아닌 수들이 지워지지 않게 됩니다.

ds020228   5년 전

감사합니다. 이해하기 쉽게 설명해주신 덕에 해결했습니다 !

댓글을 작성하려면 로그인해야 합니다.