https://www.acmicpc.net/problem/4948
- 예제 입력1
1
10
13
100
1000
10000
100000
0
- 예제 출력1
1
4
3
21
135
1033
8392
- 문제 접근
- 입력
- n < 소수 <= 2n → 적어도 하나 존재 (1 <= n <= 123,456)
- 여러 개의 테스트 케이스
- 각 케이스는 n을 포함하는 한줄로 이루어짐
- 입력의 마지막에는 0이 주어짐
- 출력
- 각 테스트 케이스에 대해서 n보다 크고, 2n보다 작거나 같은 소수의 개수 출력
- 입력
- 문제 해결
- n ~ 2n 안에 포함되는 모든 소수를 출력하는 것은 n이 커졌을 때 너무 많은 비교가 필요
- 에라토스테네스의 체를 사용하는 것이 효과적으로 보임
- 1은 제외하고 2부터 시작하여 모든 숫자는 소수라고 가정
- int i = 2부터 시작하여 i의 배수는 모두 제거
- 기존 풀이 [메모리 : 17,552 KB / 시간 : 160 ms]
public static void main(String[] args) throws IOException{
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int length = 123456 * 2;
boolean[] eratos = new boolean[length + 1];
Arrays.fill(eratos, 2, eratos.length, true);
for(int i = 2; i * i <= length; i++){
if(eratos[i]){
for(int j = i * i; j <= length; j += i){
eratos[j] = false;
}
}
}
while(true){
int n = Integer.parseInt(br.readLine());
if(n == 0) break;
int cnt = 0;
for(int i = n + 1; i <= 2 * n; i++){
if(eratos[i]) cnt++;
}
sb.append(cnt).append("\n");
}
System.out.println(sb);
}
'Coding Test > Step15. 약수, 배수와 소수 2' 카테고리의 다른 글
[Java] 9단계. 창문 닫기 [13909번] (0) | 2024.11.05 |
---|---|
[Java] 8단계. 골드바흐 파티션 [17103번] (0) | 2024.11.05 |
[Java] 6단계. 소수 구하기 [1929번] (2) | 2024.11.05 |
[Java] 5단계. 다음 소수 [4134번] (0) | 2024.11.04 |
[Java] 4단계. 가로수 [2485번] (0) | 2024.11.04 |