【Java入門】数値が素数かどうかを判定するプログラムの書き方
この記事では、Javaを使って「ある数値が素数かどうか」を判定する方法を解説します。
素数とは?
素数とは、約数が1とその数自身の2つしか存在しない、特別な性質を持つ整数のことです。言い換えると、1と自分自身以外のどの数でも割り切れない数が素数です。
例えば 11 は素数です。11の約数は 1 と 11 のみだからです。その他の素数の例としては、2、3、5、7、11、13 などが挙げられます。
なお、2 は唯一の偶数の素数であり、それ以外の素数はすべて奇数になるという点も覚えておくと良いでしょう。
動作イメージ(入力と出力)
今回作成するプログラムの入力と出力は以下のようになります。
入力:
Enter the number : 47
出力:
The number 47 is a prime number.
アルゴリズム
素数判定の処理は、次の手順で行います。
Step 1 - 処理を開始する
Step 2 - 整数型の変数(例:my_input)を宣言する
Step 3 - ユーザーから値を読み込む、または値を定義する
Step 4 - forループを使い、2 からその数の半分までの数で割り切れるかどうかを確認する。
割り切れる数がなければ素数、あれば素数ではない。
Step 5 - 結果を表示する
Step 6 - 処理を終了する
例1:ユーザーからの入力を受け取って判定する
この例では、Scanner クラスを使ってユーザーがコンソールから入力した数値に対して素数判定を行います。
import java.util.Scanner;
public class IsPrime {
public static void main(String[] args) {
int my_input;
System.out.println("必要なパッケージがインポートされました");
Scanner my_scanner = new Scanner(System.in);
System.out.println("リーダーオブジェクトが定義されました");
System.out.print("数値を入力してください : ");
my_input = my_scanner.nextInt();
boolean isComposite = false;
for (int i = 2; i <= my_input / 2; ++i) {
if (my_input % i == 0) {
isComposite = true;
break;
}
}
if (!isComposite)
System.out.println("数値 " + my_input + " は素数です。");
else
System.out.println("数値 " + my_input + " は素数ではありません。");
}
}
実行結果:
必要なパッケージがインポートされました リーダーオブジェクトが定義されました 数値を入力してください : 47 数値 47 は素数です。
例2:あらかじめ定義した値を判定する
この例では、判定対象となる整数をプログラム内であらかじめ定義し、その値が素数かどうかをコンソールに出力します。
public class IsPrime {
public static void main(String[] args) {
int my_input = 47;
System.out.println("判定対象の数値 : " + my_input);
boolean isComposite = false;
for (int i = 2; i <= my_input / 2; ++i) {
if (my_input % i == 0) {
isComposite = true;
break;
}
}
if (!isComposite)
System.out.println("数値 " + my_input + " は素数です。");
else
System.out.println("数値 " + my_input + " は素数ではありません。");
}
}
実行結果:
判定対象の数値 : 47 数値 47 は素数です。
コードのポイント
- フラグ変数:
isCompositeを用意し、2 以上の約数が見つかった時点でtrueにしてループを抜けます。最終的にfalseのままなら素数と判定できます。 - 判定範囲: 素数判定では
i <= my_input / 2まで調べれば十分です。それ以上の数で割り切れることはないためです。 - さらなる高速化: 判定範囲を
i <= Math.sqrt(my_input)にすれば、約数は平方根以下に必ず対となる約数が存在するため、より効率的に判定できます。大きな数値を扱う場合におすすめです。
このように、forループと剰余演算(%)を組み合わせるだけで、Javaで簡単に素数判定プログラムを作成できます。ぜひ実際にコードを実行して、さまざまな数値で試してみてください。
-
Pythonで数値が二面素数(Dihedral Prime)かどうかを判定する方法
ある整数nが与えられたとき、それが「二面素数(dihedral prime)」であるかどうかを判定する方法を解説します。二面素数とは、その数自体が素数であり、さらに7セグメントディスプレイに表示した際に、表示の向き(通常の向きでも上下逆さまでも)に関わらず、同じ数または別の素数として読み取れる数のことです。例えば、入力がn = 1181の場合、出力はTrueになります。下の数字は上の数字を上下逆さま(180度回転)にして表示したものであり、どちらも素数となっています。アルゴリズムの手順この問題を解くために、以下の手順で進めます。up_side_down() 関数を定義します。引数としてnを受け
-
Pythonで素数を判定するプログラムの書き方を徹底解説
はじめに この記事では、「与えられた数値が素数かどうかを判定する」という問題に対する解決策を、Pythonのコード例とともにわかりやすく解説します。 問題の概要 問題設定:ある数値が与えられたとき、その数が素数であるかどうかを判定するプログラムを作成します。 まず「素数」の定義をおさらいしましょう。1より大きい正の整数のうち、1とその数自身以外に約数を持たない数を素数(そすう)と呼びます。たとえば、2、3、5、7などはそれ以外の約数を持たないため、素数です。 プログラムの考え方 今回作成するプログラムでは、入力された数値が素数かどうかを以下の手順で判定します。 1以下の数値は素数ではない