【Java】素数を列挙するプログラム

前回、基数変換をJavaに行わせるためのプログラムを書いてみました。気になる方は↓

今回は素数を列挙するプログラムをJavaで書いてみようと思います。

素数とは

素数とは、1より大きい自然数の中で、1と自身の数以外に約数がないものを言います。

例えば、2は1と2のみが約数なので、素数です。

4は1と4以外に2も約数なので、素数ではありません。

このような判定をプログラムに行わせてみます。

プログラムの機能

今回は、1000までの数の中から素数を列挙するプログラムを作ります。

1000以上の数にも素数は当然ながらあるのですが、数が膨大になっていくので、1000までとします。

素数が何個か分かりやすいように、素数の列挙だけでなく、最後に素数の数も表示します。

また、前回の基数変換のプログラムと同様にメソッドを使います。

ソースコード

以下のようなコードになるかと思います。もちろん一例なので、これが正解だというわけではありません。

/* 素数判定プログラム */

class list20210310 {
	
	/* 素数判定を行うメソッド */
	static int judge (int input) {
		
		int i;
		int flag = 0;
		
		for (i = 2; i <= input; i++) {
			if (input % i == 0) break;
		}
		
		if (i == input) {
			flag = 1;
		}
		
		return flag;
	}
	
	/* 1から1000までカウントアップしていくメソッド */
	static int countUp () {
		
		int i;
		int flag = 0;	// 素数判定結果を受け取る変数
		int cnt = 0;		// 素数の数を数える変数

		for (i = 1; i <= 1000; i++) {
			flag = judge (i);
			if (flag == 1) {
				System.out.println (i);
				cnt++;
			}
		}
		
		return cnt;
	}
	
	public static void main (String[] args) {
		
		int cnt = 0;
		System.out.println ("1から1000までの自然数の中から、素数を列挙します。");
		cnt = countUp();
		System.out.println ("素数は" + cnt + "個ありました。");
	}
}

解説

素数判定メソッドの役割は、以下の通りです。

カウントアップを行うメソッドから値(input)を受け取ります。2からinputまで値を増やしていき、inputをiで割ったときに余りが0になる場合は(そのiの値はinputの約数であるといえるため)繰り返しを抜けるようにします。繰り返しが終わった時点でiとinputを比較してiの方が小さければ、2からinputまでの値の中に約数があるため素数ではありません。素数だった場合はflagの値を1にして、素数出なかった場合はflagの値を0のままにします。

カウントアップメソッドの役割は以下の通りです。

素数判定メソッドから渡されたflagの値を見て、0であれば何もしません。1だった場合は素数なので、cntの値をカウントアップして、画面にiの値を出力します。最後までループが回ったらcntの値をメインメソッドに渡します。

メインメソッドでcntの値を出力することで、最終的に素数が何個あったのかが分かりますね。


今回は、素数判定をJavaプログラムに行わせるということをやってみました。実際に自分でコードを組むことはインプットだけでなくアウトプットを行うことになるので、すごく理解が深まりますね。

というわけで、今回はここで終わりです。最後までお読みいただき、ありがとうございました。