public class CountPrimeNum {
public int solution(int n) {
int answer = 0;
int[] arr = new int[n + 1];
for (int i = 2; i < arr.length; i++) {
arr[i] = i;
}
for (int i = 2; i <= Math.sqrt(n); i++) {
for (int j = i * 2; j <= n; j += i) {
if (arr[j] == 0) {
continue;
}
arr[j] = 0;
}
}
for (int ele : arr) {
if (ele != 0) {
answer++;
}
}
return answer;
}
public static void main(String[] args) {
CountPrimeNum s = new CountPrimeNum();
System.out.println(s.solution(10));
System.out.println(s.solution(5));
}
}
- 에라토스테네스의 체 활용하기.
- list 또는 map을 쓰면 remove, get, put 등등에서 시간을 많이 허비함 (효율성X)
- 소수를 체크할때 나누는 수는 n의 제곱근 까지만 증가시키면 됨 (효율성)