1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.
소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.
(1은 소수가 아닙니다.)
| n | result |
|---|---|
| 10 | 4 |
| 5 | 3 |
소수 구하는 알고리즘은 아래 코드와 같다. "에라토스테네스의 접근"
for(int i=2;i<=Math.sqrt(num);i++) { if(num % i == 0) 소수아님! }
- num을 나누는 모든 숫자 a는 그에 대한 보수 b가 반드시 존재하기 때문이다. (a*b = num, sqrt(n)^2 = n)
- 수가 수를 나누면 몫이 발생하게 되는데 몫과 나누는 수, 둘 중 하나는 반드시 num의 제곱근 이하이기 때문이다.
- 주어진 자연수 num이 소수이기 위한 필요충분 조건은 num이 num의 제곱근보다 크지 않은 어떤 소수로도 나눠지지 않는다.
class Solution {
public int solution(int n) {
int answer = 0;
int check = 0;
for(int i=2;i<=n;i++) {
if(i==2) answer++;
else if(i==3) answer++;
else {
for(int j=2;j<=Math.sqrt(i);j++) {
if(i%j == 0) {
check++;
break;
}
}
if(check > 0) check = 0;
else {
answer++;
check = 0;
}
}
}
return answer;
}
}