3.xx 입니다
2가 소인수이니
14/2=7 즉 7도 소인수가 돼죠
11653번 - 소인수분해
코드에서 sqrt(N)까지 돌리는 이유가 무엇인지 잘 생각해보세요.
아래의 코드처럼 리스트에 저장하고, 이후 정렬해서 출력하면 되지 않을까요?
(@sonjaewon님이 말씀하신 것과 같은 이야기 입니다.)
완성된 버전의 답변이 없는 것 같아서 정리드리겠습니다.
r = sqrt(N)까지 다 나눠봤을 때 에라토스테네스의 체에서 합성수가 전부 걸러지는 원리는 다음과 같습니다:
1. n = ab <= N 이면, a <= r 또는 b <= r이다.
r까지 다 나눠보아서 소인수분해를 할 수 있는 원리는 위에서 파생됩니다.
2. n = ab이고 r보다 큰 소인수가 전부 a에 있으면, b는 합성수가 아니다.(즉 1 또는 소수겠죠)
조금 더 생각해보면 1에서 n = N으로 쓰듯, 2번에서는 r을 sqrt(N) 대신 sqrt(b)로 대체해도 좋은 것을 알 수 있습니다. 이 버전은 반복문에서 쓰기 매우 좋은 형태가 됩니다.
댓글을 작성하려면 로그인해야 합니다.
jhj950912 3년 전
for (int i=2; i<sqrt(N); i++)
로 푸신 분들 꽤 계시던데
N이 14인 경우 N의 루트 값은 4.xx
14의 소인수는 2 와 7인데
이 경우 7이 출력 안 되지 않나요?
어떻게 푸신 건지 설명 좀 부탁드립니다..