题意:
给定n,要求找到一个最小的整数,满足这个数的因子数为n,保证答案不超过1e18
数据范围:n<=1000
解法:
因子数相同的数中,最小的那个就是反素数,所以这道题其实就是反素数的定义题
反素数只能用dfs计算,质因子指数是非递增的
code:
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxm=1e6+5;
int prime[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,};
int ans=1e18;
int n;
void dfs(int cur,int num,int sum,int last){
if(sum>n)return ;
if(sum==n){
ans=min(ans,num);
return ;
}
if(cur==16){
return ;
}
int p=1;
for(int i=0;i<=last;i++){
dfs(cur+1,num*p,sum*(i+1),i);
p*=prime[cur];
if(1.0*num*p>1e18)break;//改成浮点数稳一点,实测不改也行
}
}
signed main(){
cin>>n;
dfs(0,1,1,60);
cout<<ans<<endl;
return 0;
}