Pagini recente » Cod sursa (job #2682369) | Cod sursa (job #154529) | Cod sursa (job #2625612) | Cod sursa (job #2192029) | Cod sursa (job #251503)
Cod sursa(job #251503)
program alex;
var f:text;
c,exp:array[1..500000]of longint;
p,q,n,k,i:longint;
li,ls,m,x,s:int64;
e:boolean;
begin
assign(f,'gfact.in');reset(f);
readln(f,p,q);
close(f);
n:=p;
k:=0;
if n mod 2=0 then begin
k:=k+1;
c[k]:=2;
while n mod 2=0 do
begin
exp[k]:=exp[k]+1;
n:=n div 2;
end;
end;
exp[k]:=exp[k]*q;
i:=3;
while(i*i<=n)and(n<>1)do
begin
if n mod i=0 then begin
k:=k+1;
c[k]:=i;
while n mod i=0 do
begin
exp[k]:=exp[k]+1;
n:=n div i;
end;
exp[k]:=exp[k]*q;
end;
i:=i+2;
end;
if n>1 then begin
k:=k+1;
c[k]:=n;
exp[k]:=exp[k]+1;
exp[k]:=exp[k]*q;
end;
li:=c[k];
ls:=c[k]*exp[k];
m:=(li+ls)div 2;
while li<=ls do
begin
e:=true;
for i:=1 to k do
begin
x:=c[i];
s:=0;
while m div x<>0 do
begin
s:=s+m div x;
x:=x*c[i];
end;
if s<exp[i] then begin
e:=false;
break;
end;
end;
if e=false then begin
li:=m+1;
m:=(li+ls)div 2;
end
else begin
ls:=m-1;
m:=(li+ls)div 2;
end;
end;
assign(f,'gfact.out');rewrite(f);
writeln(f,m+1);
close(f);
end.