fork(1) download
  1. #include<iostream>
  2. #include<vector>
  3. #include<algorithm>
  4. using namespace std;
  5.  
  6. long long p, maxn, maxid, res = 1;
  7. vector<int>vec;
  8. int primes[16] = { 1,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47 };
  9.  
  10. void dfs(long long q, long long r) {
  11. long long sum = q;
  12. for (int i = 1; i <= r; i++) {
  13. if (sum > p) { break; }
  14. if (i >= 2) {
  15. vec.push_back(i); res *= i;
  16. if (res > maxn) { maxn = res; maxid = sum; }
  17. else if (res == maxn && maxid > sum) { maxid = sum; }
  18. dfs(sum, i);
  19. }
  20. sum *= primes[vec.size()];
  21. }
  22. res /= vec[vec.size() - 1];
  23. vec.pop_back();
  24. return;
  25. }
  26. int Q;
  27. int main() {
  28. cin >> Q;
  29. for (int i = 0; i < Q; i++) {
  30. vec.clear(); maxn = 1; res = 1; maxid = 1;
  31. vec.push_back(1);
  32. cin >> p;
  33. dfs(1, 20);
  34. cout << maxn << ' ' << maxid << endl;
  35. }
  36. return 0;
  37. }
Success #stdin #stdout 0s 3464KB
stdin
2
2016
423
stdout
40 1680
24 360