题意:给一个正整数n,求出满足因子数为n的最小数x(x<1e18)
刚开始想的是将n分解,6分解为2*3,答案就是2^2*3^1=12了,但是8过不了,看了别人的思路才发现完全想错了,n的范围较小,直接暴力求最小x即可
#pragma comment(linker,"/STACK:1024000000,1024000000")
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<stack>
#include<queue>
#include<deque>
#include<set>
#include<map>
#include<cmath>
#include<vector>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
#define pi acos(-1.0)
#define eps 1e-10
#define pf printf
#define sf scanf
#define lson rt<<1,l,m
#define rson rt<<1|1,m+1,r
#define e tree[rt]
#define _s second
#define _f first
#define all(x) (x).begin,(x).end
#define mem(i,a) memset(i,a,sizeof i)
#define for0(i,a) for(int (i)=0;(i)<(a);(i)++)
#define for1(i,a) for(int (i)=1;(i)<=(a);(i)++)
#define mi ((l+r)>>1)
#define sqr(x) ((x)*(x))
const int inf=0x3f3f3f3f;
ull ans;
int n,p[]={0,2,3,5,7,11,13,17,19,23,29};
void dfs(ull v,int m,int o)
{
if(m>n)return ;
else if(m==n&&v<ans)
{
ans=v;
return ;
}
for1(i,64)
{
v*=p[o];
if(v>=ans||m*(i+1)>n)break;
if(m<n)dfs(v,m*(i+1),o+1);
}
}
int main()
{
while(~sf("%d",&n))
{
ans=1e18;
dfs(1ll,1ll,1ll);
pf("%I64d\n",ans);
}
return 0;
}