2014-01-11 4 views
0

"코드 : 컴퓨터의 숨겨진 언어"를 읽는 동안 저자가 시브 (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]이 소수 일 때 거짓이어야합니다. j 또는 i은 1과 같을 수 있습니까?

여기에 뭔가가 빠졌습니까? 나는 어떤 도움을 주셔서 감사합니다. 2에서

+0

실행했을 때 어떤 현상이 발생 했습니까? –

+0

@OliCharlesworth 정말 실행하지 못했습니다. 나는 지금 그렇게 할 것이다. – user29568

+2

'for j : = 2' - 2는 무엇을 의미한다고 생각하십니까? – Mat

답변

1
for j := 2 
     ^

j 시작되므로 전용 비 소수 '인덱스 배열 false로 설정 될 것이다 (나는 ... (3) * 2 *).

+0

그러나 i로 나눈 값. – user29568

+0

상한값 만 i로 나눕니다. 이것은 j가 2에서 시작하지만 i * j <= 10000이되도록 수행됩니다. – Inspired

+0

상한으로 무엇을 의미하는지 이해하지 못합니다. – user29568