The Factor

 Accepts: 101
 Submissions: 811
 Time Limit: 2000/1000 MS (Java/Others)
 Memory Limit: 65536/65536 K (Java/Others)
问题描述
  1. 有一个数列,FancyCoder沉迷于研究这个数列的乘积相关问题,但是它们的乘积往往非常大。幸运的是,FancyCoder只需要找到这个巨大乘积的最小的满足如下规则的因子:这个因子包含大于两个因子(包括它本身;比如,43个因子,因此它是满足这个要求的一个数)。你需要找到这个数字并输出它。但是我们知道,对于某些数可能没有这样的因子;在这样的情况下,请输出-1.
输入描述
  1. 输入文件的第一行有一个正整数T \ (1 \le T \le 15)(1T15),表示数据组数。
  2.  
  3. 接下去有TT组数据,每组数据的第一行有一个正整数n \ (1 \le n \le 100)(1n100).
  4.  
  5. 第二行有nn个正整数a_1, \ldots, a_n \ (1 \le a_1, \ldots ,a_n \le 2\times 10^9)a1​​,…,an​​ (1a1​​,…,an​​≤2×109​​), 表示这个数列。
输出描述
  1. 输出TTTT个数表示每次询问的答案。
输入样例
  1. 2
  2. 3
  3. 1 2 3
  4. 5
  5. 6 6 6 6 6
输出样例
  1. 6
  2. 4

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

代码:

  1. #include <iostream>
  2. #include <algorithm>
  3. #include <cmath>
  4. #include <vector>
  5. #include <string>
  6. #include <cstring>
  7. #include <queue>
  8. #pragma warning(disable:4996)
  9. using namespace std;
  10.  
  11. long long val[105];
  12.  
  13. const int N = 12005;
  14.  
  15. bool prime[N];
  16. int p[N];
  17. int num_c[N];
  18. int cnt;
  19.  
  20. bool cmp(long long x,long long y)
  21. {
  22. return x<y;
  23. }
  24.  
  25. void isprime()
  26. {
  27. cnt = 0;
  28. memset(prime,true,sizeof(prime));
  29. for(int i=2; i<N; i++)
  30. {
  31. if(prime[i])
  32. {
  33. p[cnt++] = i;
  34. for(int j=i+i; j<N; j+=i)
  35. prime[j] = false;
  36. }
  37. }
  38. }
  39.  
  40. int main()
  41. {
  42. isprime();
  43.  
  44. long long i,k,t,num;
  45. cin>>t;
  46. while(t--)
  47. {
  48. memset(num_c,0,sizeof(num_c));
  49. cin>>num;
  50. for (i = 0; i < num; i++)
  51. {
  52. cin >> val[i];
  53.  
  54. for(k=0; k<1437; k++)
  55. {
  56. if( val[i] % p[k] == 0)
  57. {
  58. while(val[i] % p[k] == 0)
  59. {
  60. num_c[p[k]]++;
  61. val[i] /= p[k];
  62. }
  63. }
  64. }
  65. }
  66. sort(val,val+num,cmp);
  67. long long temp1=-1,temp2=-1;
  68. for(k=0;k<1437;k++)
  69. {
  70. if(num_c[p[k]]!=0)
  71. {
  72. temp1=p[k];
  73. num_c[p[k]]--;
  74. break;
  75. }
  76. }
  77. for(k=0;k<1437;k++)
  78. {
  79. if(num_c[p[k]]!=0)
  80. {
  81. temp2=p[k];
  82. num_c[p[k]]--;
  83. break;
  84. }
  85. }
  86. if(temp2<2&&temp1>1)
  87. {
  88. for (i = 0; i < num; i++)
  89. {
  90. if(val[i]>1)
  91. {
  92. temp2=val[i];
  93. break;
  94. }
  95. }
  96. if(temp2<2)
  97. cout<<-1<<endl;
  98. else
  99. cout<<temp1*temp2<<endl;
  100. }
  101. else if(temp2<2&&temp1<2)
  102. {
  103. for (i = 0; i < num; i++)
  104. {
  105. if(val[i]>1)
  106. {
  107. temp1=val[i];
  108. val[i]=0;
  109. break;
  110. }
  111. }
  112. for (i = 0; i < num; i++)
  113. {
  114. if(val[i]>1)
  115. {
  116. temp2=val[i];
  117. val[i]=0;
  118. break;
  119. }
  120. }
  121. if(temp1<2||temp2<2)
  122. cout<<-1<<endl;
  123. else
  124. cout<<temp1*temp2<<endl;
  125. }
  126. else
  127. {
  128. cout<<temp1*temp2<<endl;
  129. }
  130. }
  131. return 0;
  132. }

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

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. day07-Python运维开发基础(深/浅拷贝、字典/集合/相关操作)

    1. 深拷贝与浅拷贝 # ### 深拷贝 和 浅拷贝 """ a = 7 b = a a = 8 print(b) lst1 = [1,2,3] lst2 = lst1 ...

  2. springboot自定义属性文件与bean映射注入属性值

    主要有几点: 一.导入依赖 springboot的包和: <dependency> <groupId>org.springframework.boot</groupId& ...

  3. iOS dismissViewControllerAnimated:completion:使用方法

    我们都知道dismissViewControllerAnimated:completion:方法是针对被present出来的控制器的,一般我们这样使用:在一个控制器中present另外一个控制器A,然 ...

  4. Python 3.8 新功能【新手必学】

       Python 3.8 是 Python 编程语言的最新主要版本, 它包含许多新功能和优化.   Python 3.8 Python 3.8 的一些新功能包括: 1. 海象运算符   PS:很多人 ...

  5. Vmware 和 VisualSVN-Server端口冲突

    安装 VisualSVN-Server 时,发现他和 Vmware   在端口  443 冲突: 先把本地自启动的 Vmware 全部停止,并改成手工启动服务: 这样可以节省资源,再安装 svn服务时 ...

  6. 010-PHP输出数组中第某个元素

    <?php $monthName = array(1 => "January", "February", "March",//初 ...

  7. PHP: isset与empty的区别

    PHP的isset()函数 一般用来检测变量是否设置 功能:检测变量是否设置 返回值: 若变量不存在则返回 FALSE 若变量存在且其值为NULL,也返回 FALSE 若变量存在且值不为NULL,则返 ...

  8. u盘使用记录、痕迹删除技巧方法

    在日常生活的使用U盘过程当中,系统会记录下大量U盘的使用记录信息,那么接下来小编就来同大家分享介绍如何删除掉这些使用记录的方法知识. 1. 往系统里面添加环境变量devmgr_shownonprese ...

  9. mysql 视图入门

  10. 京东云与AI 10 篇论文被AAAI 2020 收录,京东科技实力亮相世界舞台

    美国时间2月7-12日,AAAI 2020大会在纽约正式拉开序幕,AAAI作为全球人工智能领域的顶级学术会议,每年评审并收录来自全球最顶尖的学术论文,这些学术研究引领着技术的趋势和未来.京东云与AI在 ...