{////////////////////////////////////////////////////////// // Name: Peter M. Maurer // Program: Sieve of Eratosthenes // Due: Never // Language: Pascal //////////////////////////////////////////////////////////} Program SieveE; var Candidates : Array[0..999] of Integer; i,j : Integer; begin { define the sieve data structure } for i := 0 to 999 do begin { everything is potentially prime until proven otherwise } Candidates[i] := 1; end; { Neither 1 nor 0 is prime, so flag them off } Candidates[0] := 0; Candidates[1] := 0; { start the sieve with the integer 0 } i := 0; while i<1000 do begin { advance to the next un-crossed out number. } { this number must be a prime } while (i<1000) and (Candidates[i] = 0) do begin i := i+1; end; { insure against running off the end of the data structure } if i<1000 then begin { cross out all multiples of the prime, starting with 2*p. } j := 2; while j*i < 1000 do begin Candidates[j*i] := 0; j := j+1; end; { advance to the next candidate } i := i+1; end end; { all uncrossed-out numbers are prime (and only those numbers) } { print all primes } for i := 0 to 999 do begin if Candidates[i] <> 0 then begin writeln(i,' is prime'); end end end.