反素数+搜索
1 #include"iostream" 2 using namespace std; 3 long long n; 4 long long maxnum,maxsum; 5 //当前数,当前第k个因子 ,因子总数,限制 6 int prime[15]={2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47 }; 7 void dfs(long long num,int k,long long sum,int limit ){ 8 if(sum>maxsum){ 9 maxsum = sum; 10 maxnum = num; 11 } 12 else if(sum==maxsum&&num<maxnum){ 13 maxnum = num; 14 } 15 if(k>14) 16 return ; 17 long long temp = num; 18 int i; 19 for(i=1;i<=limit;i++){ 20 if(temp*prime[k]>n) 21 break; 22 temp = temp * prime[k]; 23 dfs(temp,k+1,sum*(i+1),i); 24 } 25 } 26 int main(){ 27 while(cin>>n){ 28 maxsum = 0; 29 maxnum = n; 30 dfs(1,0,1,50); 31 cout<<maxnum<<endl; 32 } 33 return 0; 34 }