參考了Acmdreamers的博客
反素數的定義:
對於任何正整數n,其約數個數記爲f(n)。
如果某個正整數n滿足:對任意的正整數i
爲了保證有n個約數的這個數儘量小,所有質因子必然是從2開始的連續若干個質數,並且因子的個數遞減。
應用
1. 給定一個數n,求一個最小的正整數x,使得的x約數個數爲n
2. 求出1~n中約數個數最多的這個數
主要使用dfs來計算x
下面是一道例題CodeForces27E
#include<iostream>
using namespace std;
int p[16] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53};
unsigned long long n,ans;
void dfs(int dep,unsigned long long temp,int num)
{
//cout<<dep<<' '<<temp<<' '<<num<<endl;
if(num > n) return;
if(num == n)
{
if(temp < ans)
ans = temp;
return;
}
for(int i = 1;i<=63;i++)
{
if(temp*p[dep]>ans)
break;
temp*= p[dep];
//cout<<temp<<endl;
dfs(dep+1,temp,num*(i+1));
}
}
int main()
{
cin>>n;
ans = 0x3f3f3f3f3f3f3f3f;
dfs(0,1,1);
cout<<ans<<endl;
}