자바에서 임의 정밀도 정수를 다룰 때 사용하는 java.math.BigInteger 클래스는 Java의 모든 기본 정수 연산자와 java.lang.Math의 주요 메소드에 대응하는 기능을 제공합니다. 특히 이 클래스에는 숫자가 소수인지 검사하는 메소드와, 그보다 큰 다음 소수를 찾아주는 메소드가 내장되어 있어 별도의 알고리즘 구현 없이도 손쉽게 소수 관련 작업을 처리할 수 있습니다.
1. isProbablePrime() – 소수 여부 확인하기
isProbablePrime() 메소드는 신뢰도(certainty)를 나타내는 정수 값을 매개변수로 받아, 현재 객체가 담고 있는 값이 소수인지 검사합니다. 반환값은 boolean 타입으로 다음과 같습니다.
- true – 주어진 숫자가 소수인 경우
- false – 주어진 숫자가 소수가 아닌 경우
참고로 매개변수인 certainty 값이 클수록 결과의 정확도가 높아지며, 실행 시간은 다소 길어집니다. 일반적으로 1~10 사이의 값으로도 실용적인 수준의 신뢰성을 얻을 수 있습니다.
예제 코드
import java.math.BigInteger;
import java.util.Scanner;
public class isProbablePrimeExample {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
System.out.println("숫자를 입력하세요 :");
long num = sc.nextLong();
BigInteger bigInt = new BigInteger(String.valueOf(num));
boolean prime = bigInt.isProbablePrime(1);
if (prime) {
System.out.println(num + " 은(는) 소수입니다");
} else {
System.out.println(num + " 은(는) 소수가 아닙니다");
}
}
}실행 결과 1
숫자를 입력하세요 : 25 25 은(는) 소수가 아닙니다
실행 결과 2
숫자를 입력하세요 : 19 19 은(는) 소수입니다
2. nextProbablePrime() – 다음 소수 찾기
nextProbablePrime() 메소드는 현재 BigInteger 값보다 큰 수 중에서 첫 번째로 만나는 소수를 반환합니다. 소수 후보를 직접 하나씩 검사할 필요 없이 한 번의 호출로 결과를 얻을 수 있어 편리합니다.
예제 코드
import java.math.BigInteger;
import java.util.Scanner;
public class nextProbablePrimeExample {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
System.out.println("숫자를 입력하세요 :");
long num = sc.nextLong();
BigInteger bigInt = new BigInteger(String.valueOf(num));
BigInteger prime = bigInt.nextProbablePrime();
System.out.println("다음 소수 : " + prime.intValue());
}
}실행 결과
숫자를 입력하세요 : 25 다음 소수 : 29
정리
BigInteger 클래스의 isProbablePrime()은 입력받은 수가 소수인지 빠르게 판별할 수 있고, nextProbablePrime()은 해당 값보다 큰 다음 소수를 즉시 찾아줍니다. 두 메소드를 활용하면 암호화 키 생성이나 수학적 계산 등 소수가 필요한 다양한 상황에서 간결하고 안정적인 코드를 작성할 수 있습니다.