对输入的p进行质因数分解,然后从阶乘中找到刚好拥有p的全部质因数个数的阶乘,直接输出就行了。
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
const int maxn = 1e5 + 5;
int counts[maxn];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while (t--)
{
memset(counts, 0, sizeof(counts));
int p;
cin >> p;
int r = sqrt(p);
int total = 0;
if (p == 1)
{
cout << 1 << endl;
continue;
}
for (int i = 2; i <= r; i++)
{
if (p % i == 0)
{
while (p % i == 0)
{
p /= i;
counts[i]++;
total++;
}
}
}
if (p > 1)//p是素数
{
cout << p << endl;
continue;
}
for (int i = 2; i <= 1e5; i++)
{
int temp = i;
int tr = sqrt(i);
for (int j = 2; j <= tr; j++)
{
if (temp % j == 0)
{
while (temp % j == 0)
{
temp /= j;
if (counts[j])
{
counts[j]--;
total--;
}
}
}
}
if (temp > 1)
{
if (counts[temp])
{
counts[temp]--;
total--;
}
}
if (total == 0)
{
cout << i << endl;
break;
}
}
}
}