。。。
/************************************************************** Problem: 1053 User: lxy8584099 Language: C++ Result: Accepted Time:68 ms Memory:1288 kb ****************************************************************/ /* 约数个数计算方法 预处理可能取到的最大的质数 然后暴力更新答案 */ #include<iostream> #include<cstdio> #include<cstring> #define inf 0x7fffffff #define ll long long using namespace std; int n,ans=1,num=1; int p[15]={1,2,3,5,7,11,13,17,19,23,29,31}; void dfs(int k,ll now,int cnt,int last) { if(k==12) { if(now>ans&&cnt>num){ans=now;num=cnt;} if(now<=ans&&cnt>=num){ans=now;num=cnt;} return; } int t=1; for(int i=0;i<=last;i++) { dfs(k+1,now*t,cnt*(i+1),i); t*=p[k]; if(now*t>n)break; } } int main() { scanf("%d",&n); dfs(1,1,1,20); printf("%d",ans); return 0; }