您的位置:首页 > 其它

BZOJ 1053 [HAOI2007]反素数ant

2018-10-31 16:21 471 查看

1053: [HAOI2007]反素数ant

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 4604  Solved: 2780
[Submit][Status][Discuss]

Description

 

  对于任何正整数x,其约数的个数记作g(x)。例如g(1)=1、g(6)=4。如果某个正整数x满足:g(x)>g(i) 0<i<x ,则称x为反质数。例如,整数1,2,4,6等都是反质数。现在给定一个数N,你能求出不超过N的最大的反质数么 ?

Input

  一个数N(1<=N<=2,000,000,000)。

Output

  不超过N的最大的反质数。

Sample Input

1000

Sample Output

840

HINT

 题解:先固定因数的数量,对于一个数,他的质因子的指数的数量一定不增 (假设出现后面的质因子的数量多于前面的,则可以交换两者的数量而使得这个数变小),这时候我们只要暴力搜索即可; 参考代码:
/**************************************************************
Problem: 1053
User: SongHL
Language: C++
Result: Accepted
Time:20 ms
Memory:1288 kb
****************************************************************/

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll N,temp,ans;
ll Prime[20]={2,3,5,7,11, 13,17,19,23,29, 31,37,41,43,47, 53,59,61,67,71};
void dfs(int pos,ll y,int len,ll d)
{
if(d>temp || d==temp&&ans>y) ans=y,temp=d;
if(pos>=20) return ;
for(int i=0;i<=len&&y<=N;++i,y*=Prime[pos]) dfs(pos+1,y,i,d*(i+1));
}

int main()
{
scanf("%lld",&N);
temp=0; dfs(0,1,10000,1);
printf("%lld\n",ans);
return 0;
}

  

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