すずろぐ

人生大逆転を目指す、鈴木俊吾の成長日記

スポンサーリンク

Java 練習問題として素数判定のプログラムを作成してみた

プログラミング

こんにちは、鈴木俊吾(すずしん)です。

ここ最近、プログラミングから少し遠ざかっていましたので…。 ちょっとばかり練習問題をやってみることにしました。 今回解いてみたのは「素数判定」の問題です。 私が好きなJava言語で素数判定プログラムを作成してみました。

素数判定とは?

素数判定とは、与えられた数字が素数かどうかを判定するものです。 例えば、2,3,5,7,11などが与えられると素数、4,15,22,39などが与えられると素数ではないと判定します。

プログラミングの学習を始めて間もない方が、何か良い練習問題は無いかなと探している場合…。 この素数判定のプログラムを書くのはレベル的にもちょうど良いかもしれません。 素数判定プログラム自体がそれほど複雑ではないので理解しやすいですし。

素数判定のプログラム

以下が、私が作成した素数判定のプログラムPrimeCheck.javaです。 mainメソッドとisPrimeメソッドから構成されています。

import java.util.Scanner;

/**
 * @author Shingo Suzuki
 */
public class PrimeCheck {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int number;
        while((number = scanner.nextInt()) != -1) {
            if(isPrime(number))
                System.out.printf("%d は素数です。%n", number);
            else
                System.out.printf("%d は素数ではありません。%n", number);
        }
    }
    
    public static boolean isPrime(int n) {
        if(n < 2) return false;
        if(n == 2) return true;
        if(n % 2 == 0) return false;
        
        for(int i = 3; i * i <= n; i += 2) {
            if(n % i == 0) return false;
        }
        return true;
    }
}

mainメソッド

mainメソッドでは、Scannerを使ってユーザーから数字の入力を受け付けます。 数字を受け取ると、その数字が素数かどうかをisPrimeメソッドで確認します。 もし素数なら「素数です」、素数でなければ「素数ではありません」と表示します。 -1を入力するとプログラムを終了するようにしています。

isPrimeメソッド

isPrimeメソッドは、与えられた数字nが素数かどうかを判定します。 素数ならtrue、素数でなければfalseを返します。

まず、nが2より小さいならfalse、nが2ならtrue、nが偶数ならfalseであることが分かるので、該当する場合その結果を返します。 その後、3以降の奇数で割り切れるかどうかを確認していきます。 もし割り切れた場合は素数では無いのでfalseを返します。 最後まで確認をしていき、割り切れなければそれは素数ですのでtrueを返します。

実行結果

実行結果の例を以下に載せます。 正しく素数判定されているのが分かりますね。

3
3 は素数です。
7
7 は素数です。
11
11 は素数です。
15
15 は素数ではありません。
6
6 は素数ではありません。
39
39 は素数ではありません。
-1

ひとこと

素数判定の問題は、基本的なプログラミングスキルを身につけるのにちょうど良いですね。 プログラミングの入門を終えた方は、こういった問題に挑戦してみると良いかもしれませんよ。