{ MaxonPascal3-Anpassung / Test:  Falk Zühlsdorff (PackMAN) 1994 }

Program Sieve;

Const max=2000;

{ Bei größerem "max" wird auch die Variable "s" länger und unhandlicher. }
{ Deshalb wird das Programm auch bei kleinem "m" langsamer.              }

Type Menge = set of 1..max;

Var s:   set of 0..max;
    i,j: integer;
    m:   2..max;

Procedure Ausgabe(Var f:text; m:menge; a,b:integer);
  Const NpL = 10; { Numbers per Line }
  Var i,count:integer;
  Begin
    count:=0;
    For i:=a to b Do
      If i in m Then
        Begin
          write(f,i:6);
          count:=count+1;
          If count>=NpL Then
            Begin writeln(f); count:=0 End
        End;
    writeln(f)
  End;

Begin
  writeln('Primzahlberechnung durch Sieb des Eradingsbums');
  writeln;
  write('Maximum: '); readln(m)
  s:=[2..m];
  For i:=2 to m do
    If i in s then
      Begin
        j:=i;
        write(i:8,chr($0d));
        While j<=m-i do
          Begin j:=j+i; s:=s-[j]; end;
      End;
  Ausgabe(output,s,1,m)
End.

