初看这道题,以为是一道挺难的题目,但仔细看发现,不是只要爆搜就好了吗?
只需要对前12个素数进行爆搜即可。
一个数的因数个数=素数次数+1全部乘起来。
code:
/************************************************************** Problem: 1053 User: yekehe Language: C++ Result: Accepted Time:12 ms Memory:820 kb ****************************************************************/ #include <cstdio> #define ll long long using namespace std; int N,ans=1,cnt=1; int prime[15]={1,2,3,5,7,11,13,17,19,23,29,31,37}; void so(int x,ll tot,int yzgs,int last){ if(x==12){ if(tot>ans&&yzgs>cnt)ans=tot,cnt=yzgs; if(tot<=ans&&yzgs>=cnt)ans=tot,cnt=yzgs; return ; } int t=1; for(int i=0;i<=last;i++){ so(x+1,tot*t,yzgs*(i+1),i); t*=prime[x]; if(tot*t>N)break; } return ; } int main(){ scanf("%d",&N); so(1,1,1,20); printf("%d",ans); return 0; }