思路:一个数的因子个数等于每个质因数指数+1的乘积,所以我们可以打表,存一下每个因子个数对应的数有哪些。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+1;
vector<int>v[maxn];
int tot,prime[maxn],isprime[maxn];
void Prime(int n)
{
for(int i=2;i<n;++i)
{
if(!isprime[i]) prime[tot++]=i;
for(int j=0;j<tot;++j)
{
if(i*prime[j]>n) break;
isprime[i*prime[j]]=1;
if(i%prime[j]==0) break;
}
}
}
int main()
{
int T,n;
Prime(maxn);
scanf("%d",&T);
for(int i=1;i<maxn;++i)
{
int t=i;
ll cnt=1;
for(int j=0;j<tot&&prime[j]*prime[j]<=t;++j)
{
int num=0;
while(t%prime[j]==0)
{
t/=prime[j];
num++;
}
cnt*=num+1;
}
if(t>1) cnt*=2;
if(cnt<maxn) v[cnt].push_back(i);
}
while(T--)
{
scanf("%d",&n);
printf("%d\n",v[n].size()==0?-1:v[n][0]);
}
}