
입력받은 숫자보다 큰 숫자 중
가장 작은 소수를 찾아 출력하는 문제이다.
입력받는 숫자가 굉장히 크다!!
자료형 long으로 받는것은 기본이며,
짝수를 미리 걸러내고
홀수 & 제곱근만 탐색하는 것이 추천된다.
long sqrt = (long)Math.sqrt(num);
long형 변수 num을 제곱근으로 바꾸는 메소드이다.
위 정보를 바탕으로 설계한 코드는 다음과 같다.
import java.util.*;
import java.io.*;
class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
long N = Long.parseLong(br.readLine());
for(long i=0; i<N; i++){
long num = Long.parseLong(br.readLine());
bw.write(calculate(num) + "\n");
}
bw.flush();
bw.close();
}
public static long calculate(long n){
if(n <= 2){ return 2; }
while(true){
if(isPrime(n)){ return n; }
n++;
}
}
public static boolean isPrime(long n){
if(n % 2 == 0){ return false; } // 짝수 제외
long sqrt = (long)Math.sqrt(n); // 제곱근까지만 판단
for(long i=3; i<=sqrt; i+=2){ // 홀수만 판단
if(n % i == 0){ return false; }
}
return true;
}
}
맞았습니다!!