////////////////////////////////////////////////////////////////////////////////
// << j181b.java >>
//
// 基礎(8):素数生成(エラトステネスの方法)
//
////////////////////////////////////////////////////////////////////////////////
class j181b {
public static void main(String args[]) {
int n = 100; // n以下の素数をすべて求める。
int c,i,p;
int a[]; // 配列の宣言。a[i]=0は、iが素数、a[i]=1は、iが合成数を意味する。
// n+2個分の配列要素を確保。
a = new int[n+2];
// 初期設定として、n+1以下のすべての整数を素数と仮定する。
for( i=2; i<=n+1; i++ ) { a[i] = 0; }
// 偶数を合成数とする。
p = 2;
for( i=2*p; i<=n; i=i+p ) { a[i] = 1; }
while( p < n ) {
p = p + 1;
while( a[p] == 1 ) { p = p + 1; }
// 素数pについて、2p,3p,... を合成数とする。
for( i=2*p; i<=n; i=i+p ) { a[i] = 1; }
}
// 素数の表示。
c = 0; // cは素数の個数。
for( i=2; i<=n; i++ ) {
if( a[i] == 0 ) {
System.out.print(i + " ");
c++; if( c%10 == 0 ) { System.out.println(); }
}
}
System.out.println();
System.out.println(n + "以下の素数は " + c + " 個存在する");
}
}
実行結果
% javac j181b.java
% java j181b
2 3 5 7 11 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97
100以下の素数は 25 個存在する