University stuff.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

primes.pas 1.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /* This program prints all primes up to Limit
  2. {which is 1000 in this example}
  3. using a technique called ’The sieve of Eratosthenes’.
  4. */
  5. program Primes;
  6. const Limit = 1000;
  7. var prime : array [2..Limit] of Boolean;
  8. i : integer;
  9. procedure FindPrimes;
  10. var i1 : integer; I2 : Integer;
  11. begin
  12. i1 := 2;
  13. while i1 <= Limit div 2 do begin
  14. i2 := 2 * i1;
  15. while i2 <= Limit do begin
  16. prime[i2] := false;
  17. i2 := i2+i1
  18. end;
  19. i1 := i1 + 1
  20. end
  21. end; {FindPrimes}
  22. function NDigits (v : integer): integer;
  23. /* How many digits are there in v (which is >= 0)? */
  24. begin
  25. if v <= 9 then NDigits := 1
  26. else NDigits := 1 + Ndigits(v div 10)
  27. end; {NDigits}
  28. procedure P4 (x : integer);
  29. /* *Note* Equivalent to "printf("%4d",x);" in C. */
  30. var NSpaces : integer;
  31. begin
  32. NSpaces := 4 - NDigits(x);
  33. while NSpaces > 0 do begin
  34. write(’ ’); NSpaces := NSpaces-1
  35. end;
  36. write(x);
  37. end; {P4}
  38. procedure PrintPrimes;
  39. var i : integer;
  40. NPrinted : integer;
  41. begin
  42. i := 2; NPrinted := 0;
  43. while i <= Limit do begin
  44. if prime[i] then begin
  45. if (NPrinted > 0) and (NPrinted mod 10 = 0) then write(eol);
  46. P4(i); NPrinted := NPrinted + 1;
  47. end;
  48. i := i + 1;
  49. end;
  50. write(eol)
  51. end; {PrintPrimes}
  52. begin {main program}
  53. i := 2;
  54. while i <= Limit do begin prime[i] := true; i := i+1 end;
  55. /* Find and print the primes:*/
  56. FindPrimes; PrintPrimes;
  57. end. {main program}