Прочитав «Код: скрытый язык компьютера», я наткнулся на программу ALGOL, которую автор включил для поиска простых чисел через 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
Когда я обычно вижу программу, я проверяю ее, используя реальные значения, чтобы увидеть ее достоверность. В этом случае у меня есть проблема с линией For j:=....
. Если взять i
как 3 и 3 в качестве конкретной точки на этапах j
. Тогда j
будет 1. Таким образом, a[i*j]
, то есть a[3]
, будет ложным, когда оно должно быть истинным, так как оно является простым. Может ли j
или i
быть равно 1?
Я пропустил что-то здесь? Буду признателен за любую помощь.
Что произошло, когда вы его запустили? –
@ OliCharlesworth Я действительно не запускал его. Я сделаю это сейчас. – user29568
'для j: = 2' - как вы думаете, что означает 2? – Mat