码迷,mamicode.com
首页 > 其他好文 > 详细

bzoj1053: [HAOI2007]反素数ant

时间:2016-09-10 16:11:08      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

51nod有一道类似的题。。。我至今仍然不会写暴搜!!!

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define clr(x,c) memset(x,c,sizeof(x))
#define ll long long
const ll a[]={0,2,3,5,7,11,13,17,19,23,29,31,37};
ll ans,res,n;
void dfs(ll x,ll num,ll sum,ll cnt,ll p){
    //printf("%d %d %d %d %d\n",x,num,sum,cnt,p);
    if(res==cnt*(num+1)&&ans>sum){//这里应该让ans尽量小。 
        ans=sum;
    }
    if(res<cnt*(num+1)){
        ans=sum,res=cnt*(num+1);
    }
    if(num+1<=p&&sum*a[x]<=n) dfs(x,num+1,sum*a[x],cnt,p);
    rep(i,x+1,12){
        if(sum*a[i]<=n) dfs(i,1,sum*a[i],cnt*(num+1),num);
    }
}
int main(){
    scanf("%lld",&n);
    dfs(1,0,1,1,100);//当前数,num,当前数的乘积,约数和,前一个数的个数。
    printf("%lld\n",ans);
    return 0; 
}

  

1053: [HAOI2007]反素数ant

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 2714  Solved: 1536
[Submit][Status][Discuss]

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

HINT

 

Source

 
[Submit][Status][Discuss]

bzoj1053: [HAOI2007]反素数ant

标签:

原文地址:http://www.cnblogs.com/fighting-to-the-end/p/5859384.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!