ZOJ 2562 反素数

来源:互联网 发布:ubuntu网络 编辑:程序博客网 时间:2024/05/21 03:39

本次,学到了反素数相关知识,也更深地了解了DFS递归搜索。

以不同素数来进行分层搜索,指数用来每层可以选择的。

#include<iostream>using namespace std;long long prime[15]={2,3,5,7,11,13,17,19,23,29,31,37,39,41,43};long long ans;long long maxmi;long long  n;void dfs(long long x,long long mi,long long  k,long long  limit){    if(k==15)return;     //k代表层,也代表第K+1个素数    if(x>n)return;            if(mi>maxmi)       //  每次大于则更新    {        maxmi=mi;        ans=x;    }    if(mi==maxmi)     // 相等时时候,取小的    {        if(x<ans)          ans=x;    }    for(int i=1;i<=limit;i++)  // limit是对指数的限制最后2^50次,并用下面的I传递来保证递减性!    {        x*=prime[k];                    if(x>n)return;        //此处不忘跳出。        mi*=(i+1);        dfs(x,mi,k+1,i);        mi=mi/(i+1);          //同层的要变回。    }}int main(){

    while(cin>>n)    {         ans=0;maxmi=0;         dfs(1,1,0,50);         cout<<ans<<endl;    }    return 0;}


 

原创粉丝点击