[swustoj 373] Antiprime数

Antiprime数(0373)

问题描述

如果一个自然数n(n>=1),满足所有小于n的自然数(>=1)的约数个数都小于n的约数个数,则n是一个Antiprime数。譬如:1, 2, 4, 6, 12, 24。 
任务: 
编一个程序: 
计算不大于n的最大Antiprime数。 

输入

输入只有一个整数,n(1 <= n <= 2 000 000 000)

输出

输入只有一个整数,n(1 <= n <= 2 000 000 000)

样例输入

1000

样例输出

840

#include <iostream>

#include <cstring>

#include <algorithm>

#include <cstdio>

using namespace std;

#define pb push_back

#define ll long long

#define INF 0x3f3f3f3f

#define N 2000000000



ll n;

ll res;

ll fac;

ll prime[]={2,3,5,7,11,13,17,19,23,29};



void dfs(ll x,ll y,ll z,ll last)

{

    if(x>=10){

        if(z>fac) res=y,fac=z;

        if(z==fac && y<res) res=y,fac=z;

        return;

    }

    for(ll i=0;i<=last;i++){

        if(y>n) break;

        dfs(x+1,y,z*(i+1),i);

        y*=prime[x];

    }

}

int main()

{

    while(scanf("%lld",&n)!=EOF)

    {

        res=fac=0;

        dfs(0,1,1,INF);

        cout<<res<<endl;

    }

    return 0;

}

 

你可能感兴趣的:(Prim)