1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- /* This program prints all primes up to Limit
- {which is 1000 in this example}
- using a technique called ’The sieve of Eratosthenes’.
- */
-
- program Primes;
-
- const Limit = 1000;
-
- var prime : array [2..Limit] of Boolean;
- i : integer;
-
-
- procedure FindPrimes;
- var i1 : integer; I2 : Integer;
- begin
- i1 := 2;
- while i1 <= Limit div 2 do begin
- i2 := 2 * i1;
- while i2 <= Limit do begin
- prime[i2] := false;
- i2 := i2+i1
- end;
- i1 := i1 + 1
- end
- end; {FindPrimes}
-
- function NDigits (v : integer): integer;
- /* How many digits are there in v (which is >= 0)? */
- begin
- if v <= 9 then NDigits := 1
- else NDigits := 1 + Ndigits(v div 10)
- end; {NDigits}
-
- procedure P4 (x : integer);
- /* *Note* Equivalent to "printf("%4d",x);" in C. */
- var NSpaces : integer;
- begin
- NSpaces := 4 - NDigits(x);
- while NSpaces > 0 do begin
- write(’ ’); NSpaces := NSpaces-1
- end;
- write(x);
- end; {P4}
-
- procedure PrintPrimes;
- var i : integer;
- NPrinted : integer;
- begin
- i := 2; NPrinted := 0;
- while i <= Limit do begin
- if prime[i] then begin
- if (NPrinted > 0) and (NPrinted mod 10 = 0) then write(eol);
- P4(i); NPrinted := NPrinted + 1;
- end;
- i := i + 1;
- end;
- write(eol)
- end; {PrintPrimes}
-
-
- begin {main program}
- i := 2;
- while i <= Limit do begin prime[i] := true; i := i+1 end;
-
- /* Find and print the primes:*/
- FindPrimes; PrintPrimes;
- end. {main program}
|