永发信息网

求正整数 pascal

答案:2  悬赏:50  手机版
解决时间 2021-06-06 04:06
  • 提问者网友:寂寞撕碎了回忆
  • 2021-06-05 05:11

题目

对于任意输入的正整数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

最佳答案
  • 五星知识达人网友:第幾種人
  • 2021-06-05 06:29

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.

全部回答
  • 1楼网友:街头电车
  • 2021-06-05 07:56
program p1;var g,k,n,r:integer;begin readln(k); for n:=k to 20000 do begin g:=0; for r:=1 to trunc(sqrt(n)) do if n mod r=0 then if n div r=r then inc(g) else g:=g+2; if g=k then begin writeln(n);halt;end; end; writeln('NO SOLUTION');end.
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯