Cod sursa(job #58219)

Utilizator cezar305Mr. Noname cezar305 Data 4 mai 2007 18:16:10
Problema GFact Scor 15
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.51 kb
var f1,f2:text;
    a:array[1..10000] of longint;
    b:array[1..10000] of qword;
    d,x,m,s1,s2,nr,max,p,s:int64;
    i,j,n,q:longint;

procedure putere(d,x:longint);
begin
        p:=1;
        s:=0;
        while p*d<=x do
        begin
                p:=p*d;
                s:=s+x div p;
        end;
end;

procedure search(li,ls:qword);
begin
        m:=(li+ls) div 2;
        putere(a[i],m);
        s1:=s;
        putere(a[i],m-1);
        s2:=s;
        if (s1>=b[i])and(s2<b[i]) then nr:=m
                else if li<ls then if s1>=b[i] then search(li,m-1)
                        else search(m+1,ls);
end;

begin
        assign(f1,'gfact.in');
        reset(f1);
        assign(f2,'gfact.out');
        rewrite(f2);
        read(f1,p,q);
        nr:=2;j:=0;
        while p<>1 do
        begin
                x:=1;
                if p mod nr=0 then
                begin
                        inc(j);
                        a[j]:=nr;
                        x:=0;
                end;
                while p mod nr=0 do
                begin
                        inc(b[j]);
                        p:=p div nr;
                end;
                if x=0 then b[j]:=b[j]*q;
                inc(nr,2);
        end;
        n:=j;
        nr:=0;
        max:=-maxlongint;
        for i:=1 to n do
        begin
                search(1,a[i]*b[i]);
                if nr>max then max:=nr;
        end;
        writeln(f2,m);
        close(f1);
        close(f2);
end.