Задача №1900. ???

#include <cassert>
#include <cstdio>

using namespace std;

int p[20] = {1, 2, 3, 5, 7, 11, 13, 17, 19,
  23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67};
int q[20];
long long mx = 0;
long long x;
long long n;

void recur(int d, long long res, long long m)
{
  if (res > mx || (res == mx && m < x))
  {
    mx = res;
    x = m;
  }
  long long pow = 1;
  long long r = p[d];
  while(pow <= q[d - 1] && m * r <= n && m * r > 0)
  {
    q[d] = pow;
    recur(d + 1, res * (pow + 1), m * r);
    r*=p[d];
    if (r < 0)
      break;
    pow++;
  }
}

int main( void )
{
  scanf("%lld", &n);
  assert (1 <= n && n <= 1000000000000000000ll);
  q[0] = 1000000000;
  recur(1, 1ll, 1ll);
  printf("%lld %lld\n", mx, x);
  return 0;
}
Примеры
Входные данные
2
Выходные данные
2 2
Входные данные
5
Выходные данные
3 4
Сдать: для сдачи задач необходимо войти в систему