본문 바로가기
java

[java] 백준4928 베르트랑 공준

by MiaCoder 2024. 1. 29.

입력범위롸 소수를 찾는 메소드에 주의한다.

 

Math.sqrt(num)는 해당하는 num의 제곱근을 double타입으로 반환한다.

 

즉 7을 넣으면 2.xxxx를 반환하는 것이다.

 

여기서 헷갈린 점은 만약 isPrime에 2가 들어간다면? 이었다. 2%2 == 0이니 안걸러지는거 아닐까 하는 생각이다.

 

하지만 이는 잘못된 생각이었다. 2의 제곱근은 1.xx이므로 반복문이 작동하지 않고 바로 true로 가기 때문이었다.

 

경계값에서 좀 더 주의할 필요가 있어 보인다.

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

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

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

            if (n == 0) {
                break;
            }

            int count = 0;

            for (int i = n + 1; i <= 2 * n; i++) {
                if (isPrime(i)) {
                    count++;
                }
            }
            System.out.println(count);

        }

    }

    public static boolean isPrime(int num) {
        if (num < 2) {
            return false;
        }
        for (int i = 2; i <= Math.sqrt(num); i++) {
            if (num % i == 0) {
                return false;
            }
        }
        return true;
    }
}

'java' 카테고리의 다른 글

[java] 백준 13909 창문 닫기  (1) 2024.01.29
[java] 17103 골드바흐 파티션  (0) 2024.01.29
[java] 백준 1929 소수 구하기  (0) 2024.01.29
[java] 백준 4134 다음 소수  (1) 2024.01.29
[java] 백준 2485 가로수  (0) 2024.01.26