2014-01-11 40 views
0

在閱讀「代碼:計算機隱藏的語言」時,我遇到了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 

當我通常看到一個程序時,我會用真實值來測試它,看它的有效性。在這種情況下,我所關心的是線路For j:=....。如果我們將i作爲3和3作爲步驟j中的特定點。那麼j將是1.因此,a[i*j],即a[3],如果它是素數,它應該是真的。 ji是否等於1?

我在這裏錯過了什麼嗎?我將不勝感激任何幫助。

+0

運行它時發生了什麼? –

+0

@OliCharlesworth我沒有真正運行它。我現在會這樣做。 – user29568

+2

'對於j:= 2' - 你認爲2是什麼意思? – Mat

回答

1
for j := 2 
     ^

j開始於2,所以只有非質數指標(I * 2,我* 3,...)將在數組中設置爲false

+0

但是,它除以i。 – user29568

+0

只有上限除以i。這樣做是爲了j從2開始,但是i * j <= 10000. – Inspired

+0

我不認爲我理解你的意思是上限。 – user29568