【Java】BigIntegerクラスで素数を判定し、次の素数を見つける方法
Javaで大きな整数を扱う際に便利なのが、java.math.BigIntegerクラスです。このクラスは、Javaのプリミティブ整数型のすべての演算子に相当する操作や、java.lang.Mathクラスの関連メソッドを提供しています。さらに、ある数が素数かどうかを判定するメソッドや、次の素数(確率的素数)を見つけるメソッドも用意されています。
isProbablePrime()メソッドで素数を判定する
isProbablePrime()は、現在のBigIntegerオブジェクトが表す値が素数であるかどうかを判定するメソッドです。引数には判定の「確実性(certainty)」を表す整数値を指定します。戻り値はboolean型で、以下の通りです。
true:指定された数が素数である場合
false:指定された数が素数でない場合
なお、引数の値が大きいほど判定精度は高まりますが、その分処理時間も長くなる点に注意しましょう。
サンプルコード
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 は素数です
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()メソッドを使えば、指定した数より大きい次の素数をすぐに取得できます。どちらのメソッドもlong型の範囲を超える巨大な整数にも対応しているため、暗号技術などの分野で大きな素数を扱う際に非常に有用です。
-
直方体の表面積と体積を求めるJavaプログラム
この記事では、直方体の表面積と体積を計算するJavaプログラムの書き方について詳しく解説します。直方体とは、6つの長方形の面で構成される三次元の立体のことであり、各辺の長さ・幅・高さがそれぞれ異なる場合があります。立方体と直方体の違いは、立方体では長さ・高さ・幅がすべて等しいのに対し、直方体ではこれら3つの寸法が必ずしも同じではないという点です。直方体の表面積と体積の計算式直方体の表面積は、次の式で求めることができます。2*(縦 × 横 + 横 × 高さ + 高さ × 縦)直方体の体積は、次の式で求めることができます。縦 × 横 × 高さ以下に具体的な計算例を示します。入力Length = 6
-
Javaで2つの連結リストの交点を見つける方法
連結リスト(Linked List)は、各ノードが2つのブロックで構成される線形データ構造です。一方のブロックにはノードの値(データ)が格納され、もう一方のブロックには次のノードへのアドレス(ポインタ)が格納されます。ここでは、2つの連結リストが交差するノードを見つける問題を扱います。2つのリストが共通のノードを持つ場合、その交点となるノードを特定します。交点が存在しない場合は、NULL(または空)を出力として返します。具体例入力1:出力:2説明: 与えられた連結リストは値「2」のノードで交差しているため、出力として「2」を返します。入力2:出力:NULL説明: 共通のノードが存在しないため、