Eratosthenes.pasDenna kod är public domain. Om ni hittar fel eller vill ändra något i koden blir jag jätteglad om ni skickar dessa ändringar till jesper [at] fantasi [punkt] se.
(* Eratosthenes såll är en gammal grekisk algoritm som hittar alla primtal
* upp till en given gräns.
*)
program Eratosthenes;
const limit = 20000;
var count : integer;
i, k : integer;
prime : integer;
maxsize : integer;
markNonPrimes : boolean;
flags : array[0..limit] of boolean;
begin
Write('Ange övre gräns (max ', limit, '): ');
Readln(maxsize);
if maxsize > limit then begin
Writeln('Jag vill inte räkna längre än till ', limit, '.');
maxsize := limit;
end;
Writeln;
Writeln('I intervallet 3 .. ', maxsize, ' finns följande primtal:');
Writeln('-----------------------------------------------');
maxsize := (maxsize - 1) div 2;
count := 0;
markNonPrimes := true;
for i := 0 to maxsize do
flags[i] := true;
for i := 1 to maxsize do
if flags[i] then begin
prime := i + i + 1;
Write(prime:8);
count := count + 1;
if markNonPrimes then begin
k := (i + i) * (i + 1);
if (k > maxsize) or (k < 0) then
markNonPrimes := false
else
while (k <= maxsize) and (k > 0) do begin
flags[k] := false;
k := k + prime;
end;
end;
end;
Writeln;
Writeln;
Writeln('Totalt ', count, ' primtal.');
end.
|