[HAOI2007]反素数ant

来源:互联网 发布:家用网络交换机 编辑:程序博客网 时间:2024/05/17 02:03

提交传送萌
这个就是暴力搜索,就是有一个小小的问题
设x=18 g(x)=1 2 3 6 9 18=6
分解 x=2*3*3
1个2 + 2个3
g(x)=(1+1)*(2+1)
就是多少个(相同的+1)(另外的+1)(两另外+1)
然后就可以暴力了~~~!
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<cmath>#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include<algorithm>using namespace std;int n,ans=1,num=1;int p[20]={1,2,3,5,7,11,13,17,19,23,29,31};void dfs(int k,long long now,int cnt,int tt){    if(k==12){        if(now>ans&&cnt>num){            ans=now;num=cnt;        }        if(now<=ans&&cnt>=num){            ans=now;num=cnt;        }        return;    }    int tmp=1;    for(int i=0;i<=tt;i++){        dfs(k+1,now*tmp,cnt*(i+1),i);        tmp*=p[k];        if(now*tmp>n)break;    }}int main(){    scanf("%d",&n);    dfs(1,1,1,20);    printf("%d\n",ans);    return 0;}
0 0