sop369   6년 전

어느 블로그에서 본 코드입니다.

어떤 원리로 돌아가는 건지 너무 궁금합니다.

for문에서 조건이 num%div로만 두면 언제 for문에서 탈출하는지, 너무 많이 돌지는 않는지 궁금합니다.

bupjae   6년 전

조건문 num%div 은 실제로는 num%div != 0 으로 해석됩니다. num을 div로 나눈 나머지가 0이 아닌 동안 (= 나누어 떨어지지 않는 동안) for문을 반복합니다.

"소수는 1과 자기 자신 이외로 나누어 떨어지지 않는 수"라는 정의에 충실(?)한 구현으로

2부터 차례대로 나누기를 시도해서 나누어 떨어지는 첫 번째 수를 찾고 있습니다.



그렇게 헤서 나누어 떨어지는 첫 번째 수가 자기 자신인 경우 소수이고, 그렇지 않은 경우 소수가 아닙니다.

sop369   6년 전

혹시 이렇게 되면 num이 커질경우 메모리를 많이 차지하겠죠??

bupjae   6년 전

메모리 소모량은 변하지 않는데 [ O(1) ], 실행 시간은 많이 걸립니다. [ O(n) ]

실행 시간을 줄이는 몇 가지 방법이 있을 수 있는데, 대표적으로는 나누기를 시도하는 수를 sqrt(n) 까지만 시도해 보는 방법이 있습니다.

sqrt(n) 까지 해도 나누어 떨어지는 수가 없으면 그보다 큰 수는 더 볼 필요 없이 소수라는 것이 증명되어 있습니다.

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