The Factor

 Accepts: 101
 Submissions: 811
 Time Limit: 2000/1000 MS (Java/Others)
 Memory Limit: 65536/65536 K (Java/Others)
问题描述
有一个数列,FancyCoder沉迷于研究这个数列的乘积相关问题,但是它们的乘积往往非常大。幸运的是,FancyCoder只需要找到这个巨大乘积的最小的满足如下规则的因子:这个因子包含大于两个因子(包括它本身;比如,4有3个因子,因此它是满足这个要求的一个数)。你需要找到这个数字并输出它。但是我们知道,对于某些数可能没有这样的因子;在这样的情况下,请输出-1.
输入描述
输入文件的第一行有一个正整数T \ (1 \le T \le 15)T (1≤T≤15),表示数据组数。

接下去有TT组数据,每组数据的第一行有一个正整数n \ (1 \le n \le 100)n (1≤n≤100).

第二行有nn个正整数a_1, \ldots, a_n \ (1 \le a_1, \ldots ,a_n \le 2\times 10^9)a​1​​,…,a​n​​ (1≤a​1​​,…,a​n​​≤2×10​9​​), 表示这个数列。
输出描述
输出TT行TT个数表示每次询问的答案。
输入样例
2
3
1 2 3
5
6 6 6 6 6
输出样例
6
4

实际这个题目就是要在这些数的因子中取最小的素数和次小的素数相乘。明确了这个目的就好做题了。

代码:

#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#include <queue>
#pragma warning(disable:4996)
using namespace std; long long val[105]; const int N = 12005; bool prime[N];
int p[N];
int num_c[N];
int cnt; bool cmp(long long x,long long y)
{
return x<y;
} void isprime()
{
cnt = 0;
memset(prime,true,sizeof(prime));
for(int i=2; i<N; i++)
{
if(prime[i])
{
p[cnt++] = i;
for(int j=i+i; j<N; j+=i)
prime[j] = false;
}
}
} int main()
{
isprime(); long long i,k,t,num;
cin>>t;
while(t--)
{
memset(num_c,0,sizeof(num_c));
cin>>num;
for (i = 0; i < num; i++)
{
cin >> val[i]; for(k=0; k<1437; k++)
{
if( val[i] % p[k] == 0)
{
while(val[i] % p[k] == 0)
{
num_c[p[k]]++;
val[i] /= p[k];
}
}
}
}
sort(val,val+num,cmp);
long long temp1=-1,temp2=-1;
for(k=0;k<1437;k++)
{
if(num_c[p[k]]!=0)
{
temp1=p[k];
num_c[p[k]]--;
break;
}
}
for(k=0;k<1437;k++)
{
if(num_c[p[k]]!=0)
{
temp2=p[k];
num_c[p[k]]--;
break;
}
}
if(temp2<2&&temp1>1)
{
for (i = 0; i < num; i++)
{
if(val[i]>1)
{
temp2=val[i];
break;
}
}
if(temp2<2)
cout<<-1<<endl;
else
cout<<temp1*temp2<<endl;
}
else if(temp2<2&&temp1<2)
{
for (i = 0; i < num; i++)
{
if(val[i]>1)
{
temp1=val[i];
val[i]=0;
break;
}
}
for (i = 0; i < num; i++)
{
if(val[i]>1)
{
temp2=val[i];
val[i]=0;
break;
}
}
if(temp1<2||temp2<2)
cout<<-1<<endl;
else
cout<<temp1*temp2<<endl;
}
else
{
cout<<temp1*temp2<<endl;
}
}
return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

HDU 5428:The Factor的更多相关文章

  1. HDU - 6409:没有兄弟的舞会(数学+思维)

    链接:HDU - 6409:没有兄弟的舞会 题意: 题解: 求出最大的 l[i] 的最大值 L 和 r[i] 的最大值 R,那么 h 一定在 [L, R] 中.枚举每一个最大值,那么每一个区间的对于答 ...

  2. POJ 3321:Apple Tree + HDU 3887:Counting Offspring(DFS序+树状数组)

    http://poj.org/problem?id=3321 http://acm.hdu.edu.cn/showproblem.php?pid=3887 POJ 3321: 题意:给出一棵根节点为1 ...

  3. HDU 5428 The Factor 分解因式

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5428 The Factor  Accepts: 101  Submissions: 811  Tim ...

  4. hdu 5428 The Factor 分解质因数

    The Factor  Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://bestcoder.hdu.edu.cn/contests/contest ...

  5. HDU 5428 The Factor

    话说这题意真的是好难懂啊,尽管搜到了中文题意,然而还是没懂,最后看到了一个题解才懂的.http://www.cnblogs.com/Apro/p/4784808.html#3470972 题意:给出n ...

  6. HDU 5428 The Factor (素因数分解)

    题意:给出n个数,问这n个数的乘积中至少有三个因子的最小因子.若不存在这样的因子,则输出 -1: 思路:求出每个数的最小的两个素因数,然后输出其中最小的两个数的乘积. 代码: #include< ...

  7. hdu 5428 The Factor(数学)

    Problem Description There is a sequence of n positive integers. Fancycoder is addicted to learn thei ...

  8. HDU 5428 分解质因数

                                                                                                   The F ...

  9. HDU 2732:Leapin' Lizards(最大流)

    http://acm.hdu.edu.cn/showproblem.php?pid=2732 题意:给出两个地图,蜥蜴从一个柱子跳跃到另外一个地方,那么这个柱子就可能会坍塌,第一个地图是柱子可以容忍跳 ...

随机推荐

  1. 51nod 1099:任务执行顺序 贪心

    1099 任务执行顺序 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  取消关注 有N个任务需要执行,第i个任务计算时占R[i]个空间,而后会释放一部分, ...

  2. 51nod 1441:士兵的数字游戏

    1441 士兵的数字游戏 题目来源: CodeForces 基准时间限制:4 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  取消关注 两个士兵正在玩一个游戏,游戏开始的时 ...

  3. burpsite 和jdk的配置

    最近小白再安装工具,首先是java的jdk,小白的电脑重装系统之后以前装的就没有了,然后记性不好的小白就开始百度了,百度上说是需要配置java_home和classpath路径然后再去编辑path路径 ...

  4. Redis详解(五)——主从复制

    Redis详解(五)--主从复制 面临问题 机器故障.我们部署到一台 Redis 服务器,当发生机器故障时,需要迁移到另外一台服务器并且要保证数据是同步的.而数据是最重要的,如果你不在乎,基本上也就不 ...

  5. 微信access_token设计的原理解析

    1.access_token是加密的字符串,其目的是为了接口安全考虑,不然随便就能调用微信服务器的接口会有很大风险. 2.用户在公众号中填写的Token就相当于本项目中的xiaoming,是签名验证中 ...

  6. MyBatis笔记(一)

    MyBatis学习随笔 第一个MyBatis项目 创建项目 导入maven依赖,根据需要选择性添加mysql/oracle,spring,spring-mybatis等依赖,这里就不一一列出了 < ...

  7. centos7上安装mysql8

    话不多说仍然是更换虚拟机的系列安装. 一.首先下载最先版的mysql.到官网下载https://dev.mysql.com/downloads/file/?id=477146 下载后上传linux到相 ...

  8. BZOJ 3332

    题解:给边赋上权值,然后求最大生成树,如果不符合那就无解 证明:留坑 #include<iostream> #include<cstdio> #include<cstri ...

  9. 003、mysql输出多个结果

    SELECT VERSION(); SELECT NOW(); 结果1: 结果2: 不忘初心,如果您认为这篇文章有价值,认同作者的付出,可以微信二维码打赏任意金额给作者(微信号:382477247)哦 ...

  10. 084-PHP文件引用include

    02.php <?php $color = 'green'; $fruit = 'apple'; ?> 01.php <?php echo "A $color $fruit ...