您的位置:首页 > 其它

[swustoj 373] Antiprime数

2015-06-25 14:09 344 查看

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: