您的位置:首页 > 其它

bzoj 1053 [HAOI2007]反素数ant

2015-10-08 18:49 429 查看
#include<iostream>
#include<cstdio>
using namespace std;
#define LL long long
int prime[10]={2,3,5,7,11,13,17,19,23,29};
LL ans,n,fn;
void print(){
printf("%lld",ans);
}
void dfs(int id,LL preans,LL prefn){
LL op;
if(prefn>fn){//约数和比以前求得最优值的约数和大,则此值较优;
ans=preans;
fn=prefn;
}
if(ans>preans&&prefn==fn) ans=preans;//如果约数和相同,但以前的ans值较大,不能保证比ans小的值得约数和f【n】比ans的f
小;
op=preans;
int i;
for(i=1;;i++){
if(op*prime[id]>n) break;
op*=prime[id];
dfs(id+1,op,prefn*(i+1));
}
}
int main(){
freopen ("ant.in","r",stdin);
freopen ("ant.ans","w",stdout);
scanf("%d",&n);
dfs(0,1,1);
print();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: