(************************************************
Этот модуль сгенерирован транслятором AlgoPascal.
************************************************)
uses Math, Ap;

procedure EratosthenesSieve(N : Integer; var P : TInteger1DArray);forward;


(*************************************************************************
Процедура заполняет массив P простыми числами меньшими n,
элемент массива является последним, если следующий за ним
элемент равен 0.
*************************************************************************)
procedure EratosthenesSieve(N : Integer; var P : TInteger1DArray);
var
    C : Boolean;
    I : Integer;
    J : Integer;
    K : Integer;
    R : Integer;
    S : Double;
begin
    if N>200 then
    begin
        R := trunc(N/(Ln(N)-2)+1);
    end
    else
    begin
        R := trunc(1.6*N/Ln(N)+1);
    end;
    SetLength(P, R+1);
    P[1] := 1;
    P[2] := 2;
    P[3] := 3;
    i := 4;
    repeat
        P[i] := 0;
        i := i+1;
    until  not (i<=r);
    j := 3;
    k := 3;
    repeat
        i := 2;
        s := sqrt(k);
        c := True;
        repeat
            i := i+1;
            if P[i]>S then
            begin
                P[j] := k;
                j := j+1;
                c := False;
            end;
        until  not ((trunc(k/P[i])*P[i]<>K) and C);
        k := k+2;
    until  not (k<=n);
end;