对于任何正整数 x,其约数的个数记作 g(x),例如 g(1)=1、g(6)=4。
如果某个正整数 x 满足:对于任意的小于 xx 的正整数 ii,都有 g(x)>g(i),则称 x 为反素数。
例如,整数 1,2,4,6等都是反素数。
现在给定一个数 N,请求出不超过 N 的最大的反素数。
输入格式
一个正整数 N。
输出格式
一个整数,表示不超过 N 的最大反素数。
数据范围
1≤N≤2∗109
输入样例:
1000
输出样例:
840
代码如下:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;//要加一个long long
int p[9]={2,3,5,7,11,13,17,19,23};//primes一共是有9个
int n;
int ans,maxx;
void dfs(int a,int cnt,int last,int u)
{
if(u==9) return;
if(cnt>maxx||cnt==maxx&&a<ans)
{
ans=a;
maxx=cnt;
}
for(int i=2;i<=last;i++)
{
if((LL)a*p[u]>n)break;
a*=p[u];
dfs(a,cnt*i,i,u+1);
}
}
int main()
{
cin>>n;
dfs(1,1,31,0);
cout<<ans;
return 0;
}