BZOJ1053 [HAOI2007] 反素数ant

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1053

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的最大的反质数。

看这个吧:这是一个百度文库链接

 1 #include <cstdio>
 2 #define rep(i,l,r) for(int i=l; i<=r; i++)
 3 using namespace std;
 4 typedef long long ll;
 5 const int p[] = {2,3,5,7,11,13,17,19,23,29};
 6 ll n;
 7 int ans,num;
 8 void dfs(int x,ll now,int cnt,int last){ // 第几个质数,从开始搜索至今质数的乘积,质数个数,质数幂的次数 
 9     if (x == 9){
10         if (now > ans && cnt > num) ans = now, num = cnt;
11         if (now <= ans && cnt >= num) ans = now, num = cnt;
12         return;
13     }
14     int t = 1;
15     rep(i,0,last){
16         dfs(x+1,now*t,cnt*(i+1),i);
17         t *= p[x];
18         if (now * t > n) break;
19     }
20 }
21 int main(){
22     scanf("%lld",&n);
23     dfs(0,1,1,10);
24     printf("%d\n",ans);
25     return 0;
26 }
View Code

 

posted on 2016-01-21 21:59  ACMICPC  阅读(224)  评论(0编辑  收藏  举报

导航