求含有n个因子的最小正整数(n<=1000000)

题目链接:https://ac.nowcoder.com/acm/contest/331/G

思路:

根据唯一分解定理,如果一个数n可以表示成

n=p1a1*p2a2*...*pkak (pi是第i个质数)

那么n的因数的个数为(a1+1)*(a2+1)*...*(ak+1)。

这题可以先打表。

代码如下:

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6     
 7 const int maxn=1e6+5;
 8 int t,n;
 9 int min_num[maxn],cnt[maxn];
10 int main(){
11     memset(min_num,-1,sizeof(min_num));
12     for(int i=1;i<maxn;i++)
13         for(int j=i;j<maxn;j+=i)
14             cnt[j]++;
15     for(int i=1;i<maxn;i++)
16         if(min_num[cnt[i]]==-1)
17             min_num[cnt[i]]=i;
18     scanf("%d",&t);
19     while(t--){
20         scanf("%d",&n);
21         printf("%d\n",min_num[n]);
22     }
23     return 0;
24 }

 

posted @ 2019-02-01 14:27  Frank__Chen  阅读(742)  评论(0编辑  收藏  举报