「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
ここで何か不足していますか?助けていただければ幸いです。