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

Posted Frank__Chen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求含有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 }

 

以上是关于求含有n个因子的最小正整数(n<=1000000)的主要内容,如果未能解决你的问题,请参考以下文章

2723:因子问题

连续因子

C++语言编程求变正整数N的所有因子(包括1与N本身)以及这些因子的和,其中的N值通过键盘输入?

1104: 求因子和(函数专题)

0078-求最大因子

L1-6 连续因子 (新的开始