题意:给出n,求1—n中因子最多的数的最小值,即反素数
思路:根据反素数分解质因数后,质因子越小,其对应指数越大的性质,直接DFS即可
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#define For(i,j,k) for(int i = j;i <= k;i ++)
using namespace std;
const int P[20] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59};
typedef long long LL;
LL cnt, num, n;
void AntiPrime(int k, LL now, LL ct, int Max_exp){
if(ct > cnt) cnt = ct, num = now;
if(ct == cnt && num > now) num = now;
LL t = 1;
For(i,1,Max_exp){
t *= P[k];
if(now <= n / t)
AntiPrime(k + 1, now * t, ct * (i + 1), i);
}
}
int main(){
int T;
scanf("%d", &T);
while(T--){
scanf("%lld", &n);
cnt = 1, num = n;
AntiPrime(0, 1, 1, 60);
printf("%lld %lld\n", num, cnt);
}
return 0;
}