1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.
소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.
(1은 소수가 아닙니다.)
| nums | result |
|---|---|
| 10 | 4 |
| 5 | 3 |
import java.util.*;
class Solution {
public int solution(int n) {
int answer = 0;
boolean[] prime = new boolean[n+1];
Arrays.fill(prime, true);
for(int i = 2; i <= Math.sqrt(n); i++) {
if(prime[i]) {
for(int j = i; i*j <= n; j++) {
prime[i*j] = false;
}
}
}
for (int i = 2; i <= n; i++) {
if (prime[i]) answer++;
}
return answer;
}
}
에라토스테네스의 체 알고리즘을 구사한 코드여야 런타임 에러에 걸리지 않는다.prime이라는 논리형 배열을 선언해서 값을 모두 true로 초기화 해준다.false를 대입해서 걸러낸다. 소수의 배수는 무조건 소수가 아니기 때문이다.true값이 있는 원소들의 갯수를 answer에 담아 리턴하면 입력한 수까지의 소수를 구할 수 있다.