ZOJ 2562 More Divisors

又是个水题,刚刚开始没有用搜索,因为对于反素数有:

n=2^t1*3^t2^5^t3*7^t4..... 这里有 t1>=t2>=t3>=t4。

而且相同的因数的情况下,素数越不同越好。

哪知道这个方法错了! = =。

看来还得中规中矩得用dfs。

我觉得还可以优化下,感觉搜索干了很多无用的活儿。

搜索还得好好练练啊...

 1 #include<cstdio>
 2 #define LL long long
 3 using namespace std;
 4 int prim[16] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47 };
 5 LL n,bestnum,bestsum;
 6 void dfs(LL num,LL sum,LL k,LL limit)
 7 {
 8     if(num>bestnum)
 9     {
10         bestnum=num;
11         bestsum=sum;
12     }
13     if(num==bestnum&&bestsum>sum)
14         bestsum=sum;
15     if(k>14) return;
16     for(int i=1;i<=limit;i++)
17     {
18         if(sum*prim[k]>n) break;
19         sum*=prim[k];
20         dfs(num*(i+1),sum,k+1,i);
21     }
22 }
23 int main()
24 {
25     while(scanf("%lld",&n)!=EOF)
26     {
27         bestnum=0,bestsum=n;
28         dfs(1,1,0,50);
29         printf("%lld\n",bestsum);
30     }
31     return 0;
32 }
View Code

 

posted @ 2013-08-25 21:31  Yours1103  阅读(173)  评论(0编辑  收藏  举报