题目
对于任意输入的正整数n,请编程求出至少具有n个不同因子的最小正整数m。
如n=4,则m=6,因为6含有4个不同整数因子1,2,3,6;而且是最小的有4个因子的整数。
输入
n(1≤n≤50)
输出
m
样例输入
4 5 6
样例输出
6 12 12
题目
对于任意输入的正整数n,请编程求出至少具有n个不同因子的最小正整数m。
如n=4,则m=6,因为6含有4个不同整数因子1,2,3,6;而且是最小的有4个因子的整数。
输入
n(1≤n≤50)
输出
m
样例输入
4 5 6
样例输出
6 12 12
vijos上的原题啊,以下是vijos p1229通过的代码
const
num:array[1..10]of longint=(2,3,5,7,11,13,17,19,23,29);
lim:array[1..10]of longint=(14,9,6,5,4,3,3,3,3,2);
var
n,min:longint;
f,t:array[0..29,0..15]of longint;
procedure init;
begin
readln(n);
min:=maxlongint;
fillchar(f,sizeof(f),255);
end;
function get(a,b:longint):longint;
begin
if f[a,b]<0 then
begin
if b=0 then f[a,b]:=1
else
f[a,b]:=get(a,b-1)*a;
end;
get:=f[a,b];
end;
procedure find(m,k,c:longint);
var
j:longint;
begin
if c>20000 then exit;
if m>n then exit;
if k>10 then
begin
if m=n then
if c<min then min:=c;
exit;
end;
j:=0;
while (m*(j+1)<=n)and(j<=lim[k]) do
begin
if n mod (m*(j+1))=0 then
begin
find(m*(j+1),k+1,get(num[k],j)*c);
end;
inc(j);
end;
end;
begin
init;
find(1,1,1);
if min=maxlongint then writeln('NO SOLUTION')
else
writeln(min);
end.