以下のプログラムはいわゆる「エラトステネスのふるい」というアルゴ
リズムによって整数2からN(今は10000に設定)までの素数の判
定を行うプログラムの核心部をPascalで書き出したものである。このア
ルゴリズムについてはプログラムを読むことによってどういうものか理
解してほしい。Boolean型配列aの添字に対応する数字が素数であればTR
UEを、そうでなければFALSEを設定することで判定結果を保存する。

1. boolean a[] = new boolean [1000001];
2. int i,j ;
3. int N = 10000 ;
4. a[0]=false;
5. a[1]=false;
6. for(i=2;i<=N;i++) a[i]=true ;
7. for(i=2;i<=N/2;i++)
8. for(j=2;j<=N/i;j++)
9. a[i*j]=false;

(1)今このプログラムをある計算機で実行させるとNが10000で750
 ×10^3単位、Nが1000000で1000×10^3単位の時間が
 費やされた。ではNが500000だとどのくらいの単位の時間が消費
 されるだろうか。上記程度の精度の数字で示し、その根拠を示せ。
(2)上記のプログラムは冗長な部分がある。これを正し最適化せよ。最適化
 した部分はオリジナルの行番号を参照してどのような改変を加えたか具
 体的に示せ。
(3)この変更によって250×10^3単位程度の時間でNがどの程度までの
 範囲で素数判定ができるか答え、根拠を示せ。

以上です。よろしくお願いいたします。