Description
对于任何正整数x,其约数的个数记作g(x)。例如g(1)=1、g(6)=4。
如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数。例如,整数1,2,4,6等都是反质数。
现在给定一个数N,你能求出不超过N的最大的反质数么?
Input
一个数N(1<=N<=2,000,000,000)。
Output
不超过N的最大的反质数。
Sample Input
1000
Sample Output
840
他们说2*10^9内的数符合条件的素因子个数不超过12个
打表出来直接爆搜
#include<cstdio>
#define ll long long
int pre[]={,,,,,,,,,,,};
int n;
ll ans,num;
void dfs(int k,ll now,ll cnt,int last){
if(k==){
if(now>ans&&cnt>num){ans=now;num=cnt;return;}
if(now<=ans&&cnt>=num){ans=now;num=cnt;return;}
return;
}
ll t=;
for(int i=;i<=last;i++){
dfs(k+,now*t,cnt*(last+),i);
t*=pre[k];
if (now*t>n) return;
}
} int main(){
scanf("%d",&n);
dfs(,,,);
printf("%lld",ans);
}