一道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; }