bzoj1053: [HAOI2007]反素数ant
Posted akcqhzdy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj1053: [HAOI2007]反素数ant相关的知识,希望对你有一定的参考价值。
太凉了
搜索的练习做不下去了明天再做
先做点数学题压压惊
1~n区间内最约数个数最大中最小的那个数90反素数啊。
然后你可以发现它的指数是由低位到高位递减的。否则交换一下就被淘汰了。
爆搜
#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std; typedef long long LL; const int pr[10]={2,3,5,7,11,13,17,19,23,29}; int li,ymax,mmin; LL quick_pow(LL d,int p) { LL ret=1; while(p>0) { if(p%2==1)ret*=d; d*=d;p/=2; } return ret; } void dfs(int k,int last,LL tot,LL num) { if(num>li)return ; if(k==-1) { if(ymax<tot||(ymax==tot&&mmin>num)) ymax=tot, mmin=num; return ; } int dsf=li/num,p=0; while(dsf!=0)dsf/=pr[k],p++; LL mul=quick_pow(pr[k],p); for(int i=p;i>=last;i--,mul/=pr[k]) dfs(k-1,i,tot*(1+i),num*mul); } int main() { scanf("%d",&li); ymax=0;dfs(9,0,1,1); printf("%d ",mmin); return 0; }
以上是关于bzoj1053: [HAOI2007]反素数ant的主要内容,如果未能解决你的问题,请参考以下文章