本文主要是介绍炫酷数字,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
【题目描述】
小希希望你构造一个最小的正整数,使得其有n个因子。
【输入描述】
第一行一个整数T表示数据组数
每组数据第一行输入一个正整数n,表示其因子数。
n≤1,000,000
T≤1,000,000【输出描述】
输出一行一个整数,表示你构造出的这个数。注意:你需要保证你构造的数≤1,000,000,如果在这个范围里面无法构造出一个正整数满足条件,请输出-1。
【样例】
示例1
输入
2
4
5
输出
6
16
思路:
根据唯一分解定理,一个数 n 可以写成
则 n 的因子数为:
因此直接打表因子数然后构造即可
【源代码】
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#define PI acos(-1.0)
#define E 1e-6
#define INF 0x3f3f3f3f
#define N 1000001
#define LL long long
const int MOD=998244353;
const int dx[]={-1,1,0,0};
const int dy[]={0,0,-1,1};
using namespace std;
int fact[N];
int minn[N];
int main(){memset(minn,0x3f,sizeof(minn));for(int i=1;i<=1000000;i++){for(int j=i;j<=1000000;j+=i){fact[j]++;}minn[fact[i]]=min(minn[fact[i]],i);}int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);if(minn[n]==INF)printf("-1\n");elseprintf("%d\n",minn[n]);}return 0;
}
这篇关于炫酷数字的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!