"코드 : 컴퓨터의 숨겨진 언어"를 읽는 동안 저자가 시브 (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에서
실행했을 때 어떤 현상이 발생 했습니까? –
@OliCharlesworth 정말 실행하지 못했습니다. 나는 지금 그렇게 할 것이다. – user29568
'for j : = 2' - 2는 무엇을 의미한다고 생각하십니까? – Mat