题意:
对于任何正整数x,其约数的个数记作g(x),例如g(1)=1、g(6)=4。
如果某个正整数x满足:对于任意的小于x的正整数 i,都有g(x)>g(i) ,则称x为反素数。
例如,整数1,2,4,6等都是反素数。
现在给定一个数N,请求出不超过N的最大的反素数。
解法:
dfs
质因子的指数一定是非递增的
code:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll prime[15]={0,2,3,5,7,11,13,17,19,23,29,31};
ll ans;
ll cnt;
ll n;
void dfs(ll cur,ll num,ll sum,ll last){
if(cur==12){
if(sum>cnt){
cnt=sum;
ans=num;
}else if(sum==cnt&&num<ans){
ans=num;
}
return ;
}
int p=1;
for(int i=0;i<=last;i++){
dfs(cur+1,num*p,sum*(i+1),i);
p*=prime[cur];
if(num*p>n)break;
}
}
int main(){
cin>>n;
ans=n;
dfs(1,1,1,25);
cout<<ans<<endl;
return 0;
}