[HAOI2007]反素数ant
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2005 Solved: 1130
[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
题目分析:直接深搜
#include <cstdio>
int const INF = 2e9;
int n, ans, ma;
int p[16] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31};
void DFS(int pos, int val, int num)
{
if(val > n || pos > 10)
return;
if(num > ma || num == ma && val < ans)
{
ma = num;
ans = val;
}
for(int i = 1; i <= 31; i++)
{
if(val > n / p[pos])
break;
val *= p[pos];
DFS(pos + 1, val, num * (i + 1));
}
return;
}
int main()
{
scanf("%d", &n);
ma = 0;
ans = n;
DFS(0, 1, 1);
printf("%d\n", ans);
}