Javaで数値が素数であるかどうかを調べる
1前書き
まず、同じ基本理論を見てみましょう。
簡単に言えば、1で割り切れる数とその数字自体で割り切れる数は、素数です。素数でない数は合成数と呼ばれます。そしてナンバーワンは素数でも複合でもありません。
この記事では、Javaで数字の素数をチェックするさまざまな方法について説明します。
** 2カスタム実装
このアプローチでは、2から(数の平方根)の間の数が正確に数を割り切れるかどうかをチェックできます。
次のロジックは、数が素数の場合
true
を返します。
public boolean isPrime(int number) {
return number > 2
&& IntStream.rangeClosed(2, (int) Math.sqrt(number))
.noneMatch(n -> (number % n == 0));
}
3
BigInteger
を使用する
BigIntergerクラスは、一般に大きなサイズの整数、すなわち64ビットより大きい整数を格納するために使用される。
int
と
long
の値を処理するための便利なAPIをいくつか提供しています。
これらのAPIの1つが
isProbablePrime
です。このAPIは、数値が間違いなくコンポジットである場合は
false
を返し、素数である可能性がある場合は
true
を返します。大きな整数を扱うときには、これらを完全に検証するのはかなり集中的な計算になる可能性があるので便利です。
public boolean isPrime(int number) {
BigInteger bigInt = BigInteger.valueOf(number);
return bigInt.isProbablePrime(100);
}
4 Apache Commons Math
を使う
Apache Commons Math APIは__org.apache.commons.math3.primes.Primesという名前のメソッドを提供しています。これは数値の素数性をチェックするために使用します。
まず、
pom.xml
に次の依存関係を追加して、Apache Commons Mathライブラリをインポートする必要があります。
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
<version>3.6.1</version>
</dependency>
commons-math3の最新版はhttps://search.maven.org/classic/#search%7Cga%7C1%7Ca%3A%22commons-math3%22[here]にあります。
メソッドを呼び出すだけでチェックを実行できます。
Primes.isPrime(number);