BZOJ——T 1053: [HAOI2007]反素數ant
阿新 • • 發佈:2017-09-11
pri input 一個 fin ext 約數 hint tex lan
http://www.lydsy.com/JudgeOnline/problem.php?id=1053
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
1000Sample Output
840HINT
Source
設 x=p1*^k1*p2^k2+p3^k3;則g(x)=(k1+1)*(k2+1)*(k3+1);
又因為2*3*5*7*11*13*17*19*23*26>maxn,
所以可以搜索使用的素數,該素數的次數,以及當前的x
貌似是求使g(x)最大的最小的x,以為我求最大的xWA了、、
1 #include <cstdio> 2 3 #define LL long long 4 LL n,ans=1,tmp; 5 LL ss[10]={1,2,3,5,7,11,13,17,19,23}; 6 7void DFS(LL now,int cnt,int tot) 8 { 9 if(cnt>9) return ; 10 if(tot>tmp) 11 { 12 tmp=tot; 13 ans=now; 14 } 15 if(tot==tmp&&ans>now) ans=now; 16 for(LL i=1; i<=30; ++i) 17 { 18 if(now*ss[cnt]>n) return ; 19 DFS(now*ss[cnt],cnt+1,tot*(i+1)); 20 now*=ss[cnt]; 21 } 22 } 23 24 int AC() 25 { 26 scanf("%lld",&n); 27 DFS(1,0,1); 28 printf("%lld",ans); 29 return 0; 30 } 31 32 int Aptal=AC(); 33 int main(){;}
BZOJ——T 1053: [HAOI2007]反素數ant