一道acm的题,提交TE,求大侠讲解一下解题思路(已附上自己思路和代码)
玩了一段魔兽争霸后,ZLP发现,出兵才是魔兽争霸中的王道!可是做为一名Acmer, ZLP发现这样一个道理,双方部队数量的 因子的个数相等时,部队的战斗力是相等的且等于他们因子的个数。例如双方的部队数量为6 和 8 时,因为6有四个因子(1 2 3 6 ) 而8(1 2 4 8) 也有四个因子,所以他们的战斗力都是4,所以他们的战斗力是相同的。这时候zlp想知道战斗力为n时,最小的部队数是多少? Input
输入有多组数据,以EOF结束。
每组数据有一个数n,表示战斗力(即因子的个数)(1<=n<=1000)
Output
对于每组输入输出一个数m表示最小的部队数,数据保证1<=m<=10^18
Sample Input
1
4
6
Sample Output
1
6
12
这是我的代码 但是提交时老是TE
求大神讲解一下其他解题思路
http://acm.xidian. 这是原题的地址
程序代码:#include<stdio.h>
#include<math.h>
int main()
{
int yinzi(long int i);
long int i,j,n,time,t,k;
scanf("%d",&n);
while(n!=EOF)
{
if(n==1)
printf("%d\n",n);
else if(n%2==1) //奇数的话 ,n必然是某个数的平方
{
k=2;
while(i<10e18)
{
i=k*k;
time=yinzi(i);
k++;
if(n==time) break;
}
printf("%ld\n",i);
}
else //偶数的话,n必然是2的倍数
{ k=1;
while(i<10e18)
{
i=k*2;
time=yinzi(i);
k++;
if(n==time) break;
}
printf("%ld\n",i);
}
scanf("%d",&n);
}
return 0;
}
int yinzi(long int i) //用于求解因子个数
{
long int time,t,j;
time=0;
t=sqrt(i)+1; //用于减少判断因子的次数
for(j=1;j<t;j++)
{
if(i%j==0)
{
if(i/j==j)
time++;
else
time+=2;
}
}
return time;
}









