[luogu1463 HAOI2007] 反素数 (约数)
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
Solution
题目要求的是1~n中约数最多的且最小的数
那么思路就是在约数相同时找尽量小的数
然后暴搜qwq。。
Code
//By Menteur_Hxy
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define F(i,a,b) for(register LL i=(a);i<=b;i++)
using namespace std;
typedef long long LL;
LL n,ma,ans;
LL pri[20]={0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59};
void dfs(LL now,LL cnt,LL num,LL d) {
if(num>ma||(num==ma&&now<ans)) ma=num,ans=now;
LL ret=now;
F(i,1,d) {
int reg=num*(i+1); ret*=pri[cnt];
if(ret<n) dfs(ret,cnt+1,reg,i);
else break;
}
}
int main() {
scanf("%lld",&n);
dfs(1,1,1,30);
printf("%lld",ans);
return 0;
}