1929번 - 소수 구하기
코드를 최대한 간결하게 수정해봤습니다.
65%정도까지 정답이 갔다가 런타임 에러가 납니다.
ideone에서 돌렸을 때
1 1000000을 넣었을때
115763까지만 연산이 되고
그 다음 부터 숫자가 제대로 안나오면서
런타임에러가 납니다.
대체 왜 이러는지 모르겠습니다.
메모리 문제인가요?
고수님들 도와주세요 !!
지금 생각해보니까 i*j이 부분에서 런타임에러가 나는 것 같군요
i가 최대 10 ^ 6 이고 j 가 최대 10^6이라 i *j가 int형 범위가 넘어가게 됩니다.
int형 범위가 넘어가면 음수부터 다시 시작하기 때문에 i*j<=n을 만족하게 되죠
그렇다면 arr[i*j]에 접근하게 되는데
i*j가 음수이므로 런타임에러가 나는 것 같습니다.
물론 i의 최대는 10^6이고 j의 최대는 i가 2일때 10^6/2+1 까지 올라가기는 합니다만.. 제 생각엔..
i가 10^6일 경우에는 j가 2부터 시작하기 떄문에 i*j<=n를 처음부터 만족하지 않아 i*j는 최대 2*10^6에서 끝나고
j가 최대가 되는 경우에는 i가 2일 경우 i*j는 (10^6/2+1)*2 즉 10^6+2에서 끝나기 때문에
i*j가 int형 범위를 넘어가는 일은 안 생기지 않을 까요?
int 형 범위는 20억 까지 니까요.
아 이 문제 왜 런타임에러가 나는지 잘 모르겠네요 ㅠㅠ/
(int*)malloc(sizeof(int) * n);
이 부분 (n+10)으로 바꾸고 그대로 제출하면 맞네요
죄송합니다 잘못알려드렸네요
와 정말 감사합니다. 해결은 됬는데요.
근데 왜 n+10을 해주는 건가요?
n까지 해주면 0부터 n-1인덱스까지 배열에 저장되니까 넉넉하게 n+10으로 했습니다
아아 정말 감사합니다!!!
댓글을 작성하려면 로그인해야 합니다.
0207free 3년 전
코드를 최대한 간결하게 수정해봤습니다.
65%정도까지 정답이 갔다가 런타임 에러가 납니다.
ideone에서 돌렸을 때
1 1000000을 넣었을때
115763까지만 연산이 되고
그 다음 부터 숫자가 제대로 안나오면서
런타임에러가 납니다.
대체 왜 이러는지 모르겠습니다.
메모리 문제인가요?
고수님들 도와주세요 !!