[백준] 4143번: 다음 소수 (JAVA)

2022. 1. 20. 08:57알고리즘

https://www.acmicpc.net/problem/4134

 

4134번: 다음 소수

정수 n(0 ≤ n ≤ 4*109)가 주어졌을 때, n보다 크거나 같은 소수 중 가장 작은 소수 찾는 프로그램을 작성하시오.

www.acmicpc.net

 


 

문제 설명

이 문제는 24039번 2021은 무엇이 특별할까?와 거의 비슷한 문제이다. 입력받은 수와 같거나 큰 소수를 구하는 문제이다.

 

코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigInteger;

public class Main {
	static boolean prime[] = new boolean[10004002];

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

		int t = Integer.parseInt(br.readLine());

		for (int i = 0; i < t; i++) {
			long num = Long.parseLong(br.readLine());
			var bi = new BigInteger(String.valueOf(num));

			if (bi.isProbablePrime(10)) {
				System.out.println(num);
			} else {
				System.out.println(bi.nextProbablePrime());
			}
		}

		br.close();
	}
}

코드 설명

처음에는 List를 써서 풀려고 하였으나 자꾸 ArrayIndexOutOfBounds 예외가 튀어나와서 BigInteger를 사용해서 문제를 풀었다. isProbablePrime(10)은 만약 입력값이 소수인지 아닌지 판별하는 것이고, nextProbablePrime은 입력값보다 큰 바로 다음 소수를 알려주는 메소드이다.