{* Calculates the first hundred primes by means of the formula of Sebastian Martin Ruiz (2002) *}
{* Copyright Johan Gerard van der Galien 27 August 2002 johan.van.der.galien@satoconor.com *}

program prime27;
var j,k,n,s,Ik,Hs,Gk,P1n,Pn: longint;
    R:text;

Function entier(a:real):longint;
var rnd,trnc:longint;
begin
  rnd:=round(a);
  trnc:=trunc(a);
  if (abs(a)=-a) and (rnd=trnc) then entier:=trnc-1;
  if (abs(a)=-a) and (rnd<trnc) then entier:=rnd;
  if abs(a)=a then entier:=trnc;
end;

begin
  assign(R,'D:\PASCAL\LOGDATA\PRIME27.TXT'); {* The output is to this file. *}
  rewrite(R);
  for n:=1 to 100 do
  begin
    for k:=1 to 2*(entier(n*ln(n))+1) do
    begin
      for j:=2 to k do
      begin
        for s:=1 to entier(sqrt(j)) do
        begin
          Hs:=Hs+entier((j-1)/s)-entier(j/s);
        end;
        Ik:=Ik+entier((2+2*Hs)/j);
        Hs:=0;
      end;
      Gk:=k-1+Ik;
      P1n:=P1n+(1-entier(Gk/n));
      Ik:=0;
    end;
    Pn:=1+P1n;
    writeln(R,'n=',n);
    writeln(R,'Pn=',Pn);
    P1n:=0;
  end;
close(R);
end.

