FINDNUM - Tìm số
Tác giả: ladpro98
Ngôn ngữ: Pascal
uses math;
const p:array[1..10] of longint = (2,3,5,7,11,13,17,19,23,29);
lim = trunc(1e18);
fi = '';
maxn = 1001;
var f:array[0..maxn,0..10] of int64;
pow:array[1..10,0..100] of int64;
lg:array[1..10] of longint;
i,j,k,n:longint;
res,t:int64;
inp:text;
begin
assign(inp,fi);reset(inp);
readln(inp,n);close(inp);
for i:=1 to 10 do lg[i]:=trunc(logn(p[i],lim));
for i:=1 to 10 do begin
pow[i,0]:=1;
for j:=1 to lg[i] do pow[i,j]:=p[i]*pow[i,j-1];
end;
f[1,0]:=1;
for i:=1 to n do
for j:=1 to 10 do begin
f[i,j]:=lim;
for k:=0 to lg[j] do begin
t:=f[i div (k+1),j-1];
if (i mod (k+1) = 0) and (i>k) and (t>0) and (f[i,j] div pow[j,k]>=t)then
f[i,j]:=f[i div (k+1),j-1]*pow[j,k];
end;
end;
res:=lim;
for j:=1 to 10 do res:=min(res,f[n,j]);
write(res);
end.