0

「Code: The Hidden Language of Computer」を読んでいるときに、Sieve アルゴリズムを使用して 10,000 までの素数を見つけるために著者が含めた ALGOL プログラムに出くわしました。以下はコードです。

begin
   Boolean array a[2:10000];
   integer i, j;

   for i :=2 step 1 until 10000 do
       a[i] :=true;

   for i :=2 step 1 until 100 do
       if a[i] then 
            for j := 2 step 1 until 10000 / i do
                a[i*j] :=false;
   for i :=2 step 1 until 10000 do
       if a[i] then
           print(i);
end

私は通常、プログラムを目にするとき、実際の値を使用してその妥当性をテストします。この場合、私が懸念しているのは行For j:=....です。iのステップで 3 と 3 を特定のポイントとしますj。そのj場合、 は 1 になります。a[i*j]つまり、 はa[3]、素数であるため、真であるべきときに偽になります。1に等しいか、または1になることがjできますか?i

ここで何か不足していますか?助けていただければ幸いです。

4

2 に答える 2

1
for j := 2
         ^

jは 2 から始まるため、素数以外のインデックス (i*2、i*3、...) のみがfalse配列に設定されます。

于 2014-01-11T10:46:32.327 に答える