
题目链接:https://ac.nowcoder.com/acm/contest/331/G
思路:
根据唯一分解定理,如果一个数n可以表示成
n=p1a1*p2a2*...*pkak (pi是第i个质数)
那么n的因数的个数为(a1+1)*(a2+1)*...*(ak+1)。
这题可以先打表。
代码如下:
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std; const int maxn=1e6+;
int t,n;
int min_num[maxn],cnt[maxn];
int main(){
memset(min_num,-,sizeof(min_num));
for(int i=;i<maxn;i++)
for(int j=i;j<maxn;j+=i)
cnt[j]++;
for(int i=;i<maxn;i++)
if(min_num[cnt[i]]==-)
min_num[cnt[i]]=i;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
printf("%d\n",min_num[n]);
}
return ;
}