【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个
打表出来直接爆搜
 1 #include<cstdio>
 2 #define ll long long
 3 int pre[15]={1,2,3,5,7,11,13,17,19,23,29,31};
 4 int n;
 5 ll ans,num;
 6 void dfs(int k,ll now,ll cnt,int last){
 7     if(k==12){
 8         if(now>ans&&cnt>num){ans=now;num=cnt;return;}
 9         if(now<=ans&&cnt>=num){ans=now;num=cnt;return;}
10         return; 
11     }
12     ll t=1;
13     for(int i=0;i<=last;i++){
14         dfs(k+1,now*t,cnt*(last+1),i);
15         t*=pre[k];
16         if (now*t>n) return;
17     }
18 }
19  
20  
21 int main(){
22     scanf("%d",&n);
23     dfs(1,1,1,20);
24     printf("%lld",ans);
25 } 
26 

 

posted @ 2016-02-20 07:01  Alisahhh  阅读(238)  评论(0编辑  收藏  举报