在阅读“代码:计算机的隐藏语言”时,我遇到了作者包含的 ALGOL 程序,该程序使用 Sieve 算法查找 10,000 以内的素数。下面是代码。
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
当我通常看到一个程序时,我会使用真实值来测试它以查看它的有效性。在这种情况下,我担心的是 line For j:=....
。如果我们以i
3 和 3 作为步骤中的具体点j
。则为j
1。因此,a[i*j]
即 ,a[3]
当它应该为真时为假,因为它是素数。可以j
或i
等于1吗?
我在这里错过了什么吗?我将不胜感激任何帮助。