nsieve.pp 698 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. { The Computer Language Shootout
  2. http://shootout.alioth.debian.org
  3. contributed by Joost van der Sluis
  4. }
  5. program nsieve;
  6. {$mode fpc}{$I-}
  7. var
  8. n : longint;
  9. procedure primes(n : longint); inline;
  10. var
  11. flags: PBoolean;
  12. size,i,j,count : longint;
  13. begin
  14. size := 10000 shl n;
  15. flags := getmem(size+1);
  16. fillchar(flags^,memsize(flags),true);
  17. count := 0;
  18. for i := 2 to size do
  19. if flags[i] then
  20. begin
  21. inc(count);
  22. j := i + i;
  23. while j <= size do begin
  24. flags[j] := false;
  25. inc(j, i);
  26. end;
  27. end;
  28. writeln('Primes up to', size:9, count:9);
  29. freemem(flags);
  30. end;
  31. begin
  32. val(ParamStr(1), n);
  33. primes(n);
  34. primes(n-1);
  35. primes(n-2);
  36. end.