素数プログラミングをC言語とJavaで

5月10日の記事で任意の整数2以上の自然数素数か否かを判定するJavaプログラム問題を解いたけど、判定するだけで素数を表示するわけじゃないからちょっと物足りなく思った。そこで今回は素数を表示するプログラムを書いてみた。


まずはJava

class sosuu {

	public static void main(String[] args) {
		int i, n;
				
		for(n = 2; n<=100000; n++) {
			for(i=2; i<n; i++) {
				if(n % i == 0)
				  break;
			}
			if(n == i)
				System.out.println(n);
		}

	}

}


次はCで書いてみた

int main(void) {
	int i, n;
	
	for(n = 2; n<=100000; n++) {
		for(i=2; i<n; i++) {
			if(n % i == 0)
			  break;
		}
		if(n == i)
			printf("%d\n", n);
	}
	return(0);
}

結果:

2
3
5
(中略)
99907
99923
99929
99961
99971
99989
99991


一応素数判定プログラムで確かめてみた。
結果:

2以上の整数を入力してください。
99991
99991は素数です。


このプログラムはコンピュータの十八番の繰り返し演算で行われてます。大雑把に言うと
1.割り切れたら次の数字を繰り返し割り算
2.割り切れなかったら表示
です。意外と簡単。他にも素数プログラムを出力するエラトステネスの篩(ふるい)というのがあるみたいで、こっちもプログラミングはできそう?です。また今度挑戦してみよう。


wikipedia:エラトステネスの篩


CもJavaもほとんど同じプログラムで、Javaからプログラミングを始めた自分でも簡単にCを書けるのだけど、ちょっとJavaに対して不満がある。それはSystem.out.prinltnが長いこと!!!Cならprintfだけじゃん。なんでわざわざSystemとか付けなきゃならんの?おまけに大文字のSを打つのが苦手だから面倒だ。


あと入力させる時、Cならscanfを使えば一発なのに、Javaはクラスを輸入したり、宣言したりしないといけないからこれも面倒。


何か理由があるのかは知らないけど、Javaにこういう面倒がなけりゃいいんだけどなあ。


※追記
発見した素数の数も表示する

class sosuu {

	public static void main(String[] args) {
			int i, n;
			long  cnt=0;
				
			for(n = 2; n<=100; n++) {
				for(i=2; i<n; i++) {
					if(n % i == 0)
						break;
				}
				if(n == i){
					System.out.println(n);
					cnt++;
				}
			}
			System.out.println("発見した素数の数:"+cnt);
	}

}

結果:(100までの中でいくつ素数があるか)

2
3
5
7
(中略)
89
97
発見した素数の数:25