class Primes{ public static void main(String[] args){ int n=1000,i,k; int p[]=new int[n+1]; for(i=2; i<=n; i++) p[i]=1; // i++はi=i+1と同じ意味 for(i=2; i<=n; i++) if(p[i]==1){ System.out.print(i+" "); for(k=2; i*k<=n; k++) p[i*k]=0; } } }このプログラムでは p という配列が使われている. iが素数の可能性がある 時はp[i]が1, 合成数の時はp[i]が0になるように計算していく. 配列の宣言と 作成は,
int p[]=new int[n+1];の部分である. これは,
int p[]; p=new int[n+1];という2つの文に分けて書いても良い(続けて書かなくても良い). newは配列や オブジェクトの生成を表す予約語で, 次のintは要素の型を示す. [n+1]は作成 する配列の大きさ(要素数)が n+1 であることを示す. 配列の大きさを宣言時 に決定しなくてもよいのは, Javaの特徴の1つである.
注)上のプログラムでは int の配列を使っているが, よりJavaらしく書くなら
boolean(真偽値を表す型)の配列を使って
上のプログラムで素数が求まる原理が分かりにくいかもしれない. は
いぱーワークブック「プログラミング」でも
素数表のページでほとんど同じプログラムを扱っているので,
分からない人はそちらの説明を見て欲しい.
class PrimesWithBool{
public static void main(String[] args){
int n=1000,i,k;
boolean p[]=new boolean[n+1];
for(i=2; i<p.length; i++) p[i]=true;
for(i=2; i<p.length; i++)
if(p[i]){
System.out.print(i+" ");
for(k=2; i*k<=n; k++) p[i*k]=false;
}
}
}
のように書く. なお配列型の変数に .lengthをつけて p.lengthのようにする
と, その配列の要素数を返す.
次に進む