http://codeforces.com/problemset/problem/27/E
E. Number With The Given Amount Of Divisors
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
Given the number n, find the smallest positive integer which has exactly n divisors. It is guaranteed that for the given n the answer will not exceed 1018.
Input
The first line of the input contains integer n (1 ≤ n ≤ 1000).
Output
Output the smallest positive integer with exactly n divisors.
Examples
input
4
output
6
input
6
output
12
求因子数一定的最小数
#include<iostream>
#include<cstdio>
using namespace std;
#define LL long long
#define INF 0x7fffffffffffffff
LL ans, n;
LL p[16]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53};
// dep: 当前在枚举第几个素数。num: 当前因子数。
// tmp: 当前因子数量为 num 的时候的数值。
// up: 上一个素数的幂,这次应该小于等于这个幂次
void dfs(LL dep, LL tmp, LL num, LL up){
if(num>n || dep>=16) return;
if(num==n && tmp<ans){
ans=tmp;
return;
}
for(int i=1;i<=up;++i){
if(tmp/p[dep]>ans) break;
dfs(dep+1,tmp=tmp*p[dep],num*(i+1),i);
}
}
int main()
{
while(~scanf("%lld",&n)){
ans=INF;
dfs(0,1,1,64);
printf("%lld\n",ans);
}
return 0;
}