版权声明:本人原创,未经许可,不得转载 https://blog.csdn.net/qq_42505741/article/details/84660500
题目:
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
解题报告:给你一个数字n,求最小的数字(他的因子数目是n的数)。反素数的模板题,之前没有接触过,第一次觉得没有思路,后来慢慢就理解了,关于反素数的求解是参考了大佬的博客这里这里!!!,使用dfs进行遍历,增加满足最小成立条件的优化。
ac代码:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn =1e5+100;
ll n;
ll ans=1e18;
ll num[]={0,2,3,5,7,11,13,17,19,23,29};
void fin(ll v,ll nn,ll p)
{
if(nn>n)
{
return ;
}
if(nn==n)
{
if(v<ans)
ans=v;
return ;
}
for(int i=1;i<=64;i++)
{
v*=num[p];
if(v>=ans) break;
if(nn<n)
{
fin(v,nn*(i+1),p+1);
}
}
}
int main()
{
scanf("%lld",&n);
if(n==1)
{
printf("1\n");
return 0;
}
fin(1ll,1ll,1ll);
printf("%lld\n",ans);
return 0;
}