【BZOJ 1053】[HAOI2007]反素数ant

时间:2023-03-09 01:30:30
【BZOJ 1053】[HAOI2007]反素数ant

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);
}