ZOJ2562 More Divisors

来源:互联网 发布:清代档案文献数据库 编辑:程序博客网 时间:2024/05/21 19:33

题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1562
分析:详见上上篇博文
代码:

#include <cstdio>#include <algorithm>#include <iostream>using namespace std;const int pri[20]={0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53};unsigned long long int n,ans,ansnum;void dfs(int p,unsigned long long int sum,long long int num){    if(p>16) return;    if(sum>n) return;    if(ansnum<num)    {        ansnum=num;        ans=sum;    }    if(ansnum==num) ans=min(ans,sum);    int i;    for(i=1;i<=63;i++)    {        if(n/pri[p]<sum) break;        dfs(p+1,sum*=pri[p],num*(i+1));    }    return;}int main(){    while(scanf("%llu",&n)==1)    {        ans=n+1;        ansnum=0;        dfs(1,1,1);        printf("%llu\n",ans);    }    return 0;}
0 0