程序员回复——《因子个数》 C++

题目正文
【问题描述】
一个自然数N的正因子个数记为F(N),例如18的所有正因子为1、2、3、6、9、18,所以F(18)=6。现在给出K,求所有满足F(N)=K的N中最小的数。
【输入格式】
从文件读入数据,第一行为K,其中0<K≤80。
【输出格式】
输出到文件第一行,如果存在不大于20000的解,则输出这个N,否则输出"NO SOLUTION"。
【输入样例】
9
【输出样例】
36

第1个回答  2013-05-14
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,n,ans[20001],a;
memset(ans,0,sizeof(ans));
for (n = 1; n <= 20000; n++)
for (i = 1;i <= n; i++)
if(n%i==0)ans[n]++;
bool is_ans;
while (~scanf("%d",&a))
{
is_ans = 0;
for (i = a; i < 20001; i++)
{
if(ans[i] == a)
{
printf("%d\n",i);
is_ans = true;
break;
}
}
if(!is_ans)printf("NO SOLUTION\n");
}
}
第2个回答  2013-05-14
Var i,j,k,d:longint;
a:Array [1..20000]of longint;
begin
readln(k);
for i:=1 to 20000 do
begin
j:=1;
d:=0;
while j*j<i do begin if i mod j=0 then inc(d); inc(j); end;
if j*j=i then a[i]:=2*d+1
else a[i]:=2*d;
if a[i]=k then begin writeln(i); halt; end;
end;
writeln('NO SOLUTION');
end.

采纳我哦本回答被提问者和网友采纳
第3个回答  2013-05-14

你自己看看,不懂再问!

忘了有个0<k<=80的要求,LZ可以自己修改吧,把scanf("%d",&k)扩展成

do{scanf("%d",&k)

}while(k<0||k>80);即可

相似回答