【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