소수 구하기 - 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;
}