Cod sursa(job #387695)

Utilizator mimarcelMoldovan Marcel mimarcel Data 28 ianuarie 2010 10:18:03
Problema Factorial Scor 95
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.17 kb
const max5=13;
var p5:array[0..max5]of longint;
    p:longint;

procedure crearep5;
var i:byte;
begin
p5[0]:=1;
for i:=1 to max5 do p5[i]:=p5[i-1]*5;
end;

function verifica(n:longint):longint;
var p,p2:longint;
    i:byte;
begin
p:=0;
i:=1;
while i<=max5 do
  begin
  p2:=n div p5[i];
  if p2=0 then break;
  p:=p+p2;
  i:=i+1;
  end;
verifica:=p;
end;

procedure sol;
var n1,n2,n,r:longint;
begin
n1:=1;
if(maxlongint-7) div p>=5 then n2:=p*5
                          else n2:=maxlongint-7;
n:=1;
r:=p;
while n1<=n2 do
  begin
  n:=n1+(n2-n1)div 2;
  while n mod 5<>0 do dec(n);
  r:=verifica(n);
  if r=p then break
         else if r<p then begin
                          n1:=n+1;
                          while n1 mod 5<>0 do inc(n1);
                          end
                     else begin
                          n2:=n-1;
                          while n2 mod 5<>0 do dec(n2);
                          end;
  end;
if r<>p then write('-1')
        else write(n);
end;

begin
assign(input,'fact.in');
reset(input);
assign(output,'fact.out');
rewrite(output);
read(p);
crearep5;
sol;
close(output);
close(input);
end.