[백준] 4948 베르트랑 공준 - Java

Yunki Kim·2022년 12월 20일
0

백준

목록 보기
68/104
post-thumbnail

문제


링크


코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        while (true) {
            int n = Integer.parseInt(br.readLine());
            if (n == 0) break;

            boolean[] primeNumber = new boolean[((n * 2) + 1)];
            primeNumber[0] = primeNumber[1] = true;
            for (int i = 2; i <= Math.sqrt(primeNumber.length); i++) {
                if (primeNumber[i]) continue;
                for (int j = (i * i); j < primeNumber.length; j += i) {
                    primeNumber[j] = true;
                }
            }

            int count = 0;
            for (int i = (n + 1); i <= (n * 2); i++) {
                if (!primeNumber[i]) count++;
            }
            sb.append(count).append("\n");
        }
        System.out.print(sb);
    }
}

리뷰

이전 문제와 비슷하지만 두 값을 입력받는 것이 아닌 한 값을 입력받고 그 두배의 사이의 소수의 개수를 구하는 문제이다.

과정은 동일하나 주의해야할 점은 범위가 n < x <= 2n 이다.

0개의 댓글