炫酷数字 (扩展埃式筛法)

链接:https://ac.nowcoder.com/acm/contest/331/G
来源:牛客网
 

时间限制:C/C++ 2秒,其他语言4秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述

小希希望你构造一个最小的正整数,使得其有n个因子。

输入描述:

第一行一个整数T表示数据组数

每组数据第一行输入一个正整数n,表示其因子数。

n≤1,000,000

T≤1,000,000

输出描述:

输出一行一个整数,表示你构造出的这个数。注意:你需要保证你构造的数≤1,000,000,如果在这个范围里面无法构造出一个正整数满足条件,请输出-1。

示例1

输入

复制

2
4
5

输出

复制

6
16

题意:找到有n个因子的最小值。单来说就是:找一个数的因子的个数。

题解:预处理一下,处理处所有因子数的最小值,下标代表因子数,值代表最小值~~详细看代码:
 

#include <iostream>
#include <cstdio>
using namespace std;
const int MAX = 1e6+520;
int a[MAX],b[MAX];
void init(){//扩展埃式筛法
    for (int i = 1; i <= 1e6;i++){
        for (int j = i; j <= 1e6;j+=i){
            a[j]++;
        }
        if(!b[a[i]]){//保证是最小的
            b[a[i]]=i;//下标保存因子数,值对应的最小值
        }
    }
}
int main(){
    init();
    int t;
    scanf("%d",&t);//要用标准输入输出,要不然超时哦~~
    while(t--){
        int n;
        scanf("%d",&n);
        if(b[n]==0) printf("-1\n");
        else printf("%d\n",b[n]);
    }
    return 0;
}

 

全部评论

相关推荐

07-21 18:43
门头沟学院 Java
是暑期都招满了吗
ANEOY:今年感觉真是后端地狱级难度了,从暑期就是这样,前端需求非常大
点赞 评论 收藏
分享
投递腾讯等公司10个岗位
点赞 评论 收藏
分享
06-10 23:36
已编辑
首都经济贸易大学 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务