2014-01-11 6 views
0

Прочитав «Код: скрытый язык компьютера», я наткнулся на программу 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?

Я пропустил что-то здесь? Буду признателен за любую помощь.

+0

Что произошло, когда вы его запустили? –

+0

@ OliCharlesworth Я действительно не запускал его. Я сделаю это сейчас. – user29568

+2

'для j: = 2' - как вы думаете, что означает 2? – Mat

ответ

1
for j := 2 
     ^

j начинается на 2, индексы так только не простых чисел (я * 2, я * 3, ...) будет установлен в false в массиве.

+0

Но его разделение на i. – user29568

+0

Только верхняя граница делится на i. Это делается так, что j начинается с 2, но i * j <= 10000. – Inspired

+0

Я не думаю, что понимаю, что вы подразумеваете под верхней границей. – user29568