思路:
直接dfs每个素数的个数
c o d e code code
#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
ll t, n, ans1, ans2;
ll a[110];
ll prim[110], tot;
void dfs(ll x, ll i, ll sum, ll last) {
if(sum > ans2) ans1 = x, ans2 = sum;
if(sum == ans2) ans1 = min(x, ans1);
ll t = prim[i], k = 1;
while(x <= n / t && k <= last) {
dfs(x * t, i + 1, sum * (k + 1), k);
t = t * prim[i], k ++;
}
}
int main()
{
for(ll i = 2; ; i ++) {
bool flag = 1;
for(ll j = 2; j * j <= i; j ++)
if(i % j == 0) { flag = 0; break; }
if(flag) prim[++ tot] = i;
if(tot == 16) break;
}
scanf("%lld", &t);
while(t --) {
ans1 = ans2 = 0;
scanf("%lld", &n);
dfs(1, 1, 1, 100);
printf("%lld %lld\n", ans1, ans2);
}
return 0;
}