bzoj1053[HAOI2007]反素数ant
1053: [HAOI2007]反素数ant
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3842 Solved: 2257
[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
结论+暴搜
http://hzwer.com/3141.html
1 #include<bits/stdc++.h> 2 using namespace std; 3 int p[]={1,2,3,5,7,11,13,17,19,23,29,31}; 4 int n,ans=1,num=1; 5 6 void dfs(int pos,int cnt,int now,int ls){ 7 if(pos==12){ 8 if(now>ans&&cnt>num){ans=now;num=cnt;} 9 if(now<=ans&&cnt>=num){ans=now;num=cnt;} 10 return; 11 } 12 int t=1; 13 for(int i=0;i<=ls;i++){ 14 if(1ll*t*now>n)break; 15 dfs(pos+1,cnt*(i+1),now*t,i); 16 t*=p[pos]; 17 } 18 } 19 20 int main(){ 21 scanf("%d",&n); 22 dfs(1,1,1,20); 23 printf("%d\n",ans); 24 return 0; 25 }
If you live in the echo,
your heart never beats as loud.
如果你生活在回声里,
你的心跳声永远不会轰鸣作响。