[BZOJ1053] 反素数 - dfs

钦定大水题qwq

#include"stdio.h"
using namespace std;
typedef long long ll;

int ans,ansn,n;
int pri[20]={0,2,3,5,7,11,13,17,19,23,29,31,37};

void dfs(int pos,int x,int lat,int a,int s){
    if (x<pri[pos]){
        if(s>ansn||(a<ans&&s==ansn)) ans=a,ansn=s;
        return ;
    }
    int cnt=0,p=pri[pos];
    while (cnt<=lat&&x>=p){ 
        dfs(pos+1,x/=p,cnt,a*=p,s*(++cnt+1));
    }
}

int main(){
    ans=ansn=1; scanf("%d",&n);
    dfs(1,n,50,1,1); printf("%d\n",ans);
    return 0;
}


你可能感兴趣的:([BZOJ1053] 反素数 - dfs)