소수 구하기 - ksu1013/ksu1013 GitHub Wiki

public static void main(String[] args) throws IOException { Scanner scanner = new Scanner(System.in);

    // N개의 줄을 읽어오기
    List<Long> list = new ArrayList<>();
    long a = Integer.parseInt(scanner.nextLine());
    for (int i=0; i<a; i++){
        long b = Integer.parseInt(scanner.nextLine());
        list.add(b);
    }

    for (int i = 0; i < list.size(); i++) {
        long n = list.get(i);

        while (true) {
            if (isPrime(n)) {
                System.out.println(n);  // 출력은 문제에서 요구한 값만!
                break;
            }
            n++;
        }
    }
    scanner.close();

}

private static boolean isPrime(Long n){
    if (n <= 1) return false;  // 0, 1은 소수 아님
    if (n == 2) return true;   // 2는 소수
    if (n % 2 == 0) return false; // 짝수는 소수 아님 (2 제외)

    //Math.sqrt(n) 는 제곱근 구하는 함수
    // Math.sqrt(9);     // 결과: 3.0
    // Math.sqrt(2);     // 결과: 1.4142...
    /*
    ✅ 소수 판별에서 왜 쓰일까?
        소수인지 판별할 때 n까지 모든 수를 나눠볼 필요 없이, √n까지만 검사하면 충분하기 때문이에요.

        예:
        예를 들어 n = 29라면,

        29의 제곱근은 약 5.38 → 2부터 5까지만 검사해도 충분

        왜냐하면 어떤 수가 n을 나눌 수 있다면, 반드시 그 수보다 작은 수 중 하나도 나눌 수 있기 때문입니다.
        (즉, n = a × b일 때, a와 b 중 하나는 반드시 √n 이하)

        Math.sqrt(n)의 결과는 double이므로, 반복문 쓸 때는 i * i <= n 형태로 쓰면 더 안전하고 빠릅니다.
        
    * */

    for (long i = 3; i * i <= n; i += 2) {
        if (n % i == 0) return false;
    }
    return true;
}
⚠️ **GitHub.com Fallback** ⚠️