题目:http://codeforces.com/problemset/problem/27/E
分析:详见上一篇博文
代码:
#include <cstdio>
#include <algorithm>
using namespace std;
const int pri[20]={0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53};
int n;
long long int ans=1000000000000000000;
void dfs(int p,long long sum,int num)
{
if(num>n) return;
if(num==n)
{
ans=min(ans,sum);
return;
}
int i;
for(i=1;i<=n;i++)
{
if(ans/pri[p]<=sum) break;
dfs(p+1,sum*=pri[p],num*(i+1));
}
return;
}
int main()
{
scanf("%d",&n);
dfs(1,1,1);
printf("%I64d",ans);
return 0;
}