题目
分析
先打个素数表,然后根据表打出跟多约数的数
代码
1 #include<bits/stdc++.h>
2 #define L long long
3 using namespace std;
4 L n,pi,ans,num;
5 int p[10005];
6 bool flag[1000010];
7 void fun()
8 {
9 for(int i=2;i<=1000000;i++)
10 if(!flag[i])
11 {
12 p[++pi]=i;
13 for(int j=2;j<=1000000/i;j++)
14 flag[j*i]=1;
15 }
16 }
17 void dfs(L x,int lev,int t,int s)
18 {
19 if(t>num||(t==num&&x<ans)) ans=x,num=t;
20 int j=0,l=1,q;
21 L i=x;
22 while(j<s)
23 {
24 j++,l++;
25 if(n/i<p[lev]) break;
26 q=t*l;
27 i*=p[lev];
28 if(i<=n) dfs(i,lev+1,q,j);
29 }
30 }
31 int main()
32 {
33 fun();
34 cin>>n;
35 dfs(1,1,1,30);
36 cout<<ans;
37 }