炫酷数字-(埃氏筛)
链接:https://ac.nowcoder.com/acm/contest/331/G
来源:牛客网
题目描述
小希希望你构造一个最小的正整数,使得其有n个因子。
输入描述:
第一行一个整数T表示数据组数
每组数据第一行输入一个正整数n,表示其因子数。
n \le 1,000,000
T \le 1,000,000
输出描述:
输出一行一个整数,表示你构造出的这个数。注意:你需要保证你构造的数\le 1,000,000,如果在这个范围里面无法构造出一个正整数满足条件,请输出-1。
示例1
输入
2 4 5
输出
6 16
#include<stdio.h> #include<iostream> #include<algorithm> #include<cstring> #include<string> #include<queue> #include<math.h> #include<set> #include<vector> #define ll long long #define inf 0x3f3f3f3f using namespace std; const int maxx=1e6+5; int cnt[maxx]; int ans[maxx]; int main()///埃氏筛 { memset(cnt,0,sizeof(cnt)); memset(ans,-1,sizeof(ans)); for(int i=1;i<maxx;i++) { for(int j=i;j<maxx;j=j+i)///每次加一个i,当作对那些是i的倍数的cnt+1,表示因子数+1 { cnt[j]++; } if(ans[ cnt[i] ]==-1)///因子数从1开始,逐渐变大,第一次遇见没有遇见过的因子数则是最小的 ans[ cnt[i] ]=i; } int t,n; scanf("%d",&t); while(t--) { scanf("%d",&n); printf("%d\n",ans[n]); } return 0; }