题意:

给你n个数,让你从中选一个子集要求子集中的任何两个数相加都是质数。

思路:

一开始把自己坑了,各种想,后来发现一个简单的性质,那就是两个数相加的必要条件是这两个数之中必定一个奇数一个偶数,(除了含有1 集合以外,1+1等于2也是质数)。

考虑两种情况,有1存在和1不存在这两种。

很显然1存在的情况下,所有的1都可以同时在集合中出现,要想集合最大不能加奇数,只能加偶数,那么我们看原始集合中是否有偶数加一是素数。

不考虑1的情况下,这样的子集最大是2,只有存在一个奇数一个偶数相加是质数的情况下才存在个数是2的子集。

比较下输出答案就好了==

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int prime[];
  4. int tmp[];
  5. int ji[],ou[];
  6. int num[];
  7. bool can[][],goon[];
  8. void fprime()
  9. {
  10. int atmp=,i,j;
  11. for(i=;i<;i++)
  12. {
  13. if(!prime[i])
  14. {
  15. tmp[atmp++]=i;
  16. }
  17. for(j=;j<atmp;j++)
  18. {
  19. if(i*tmp[j]>)
  20. break;
  21. prime[i*tmp[j]]=;
  22. if(i%tmp[j]==)
  23. break;
  24. }
  25. }
  26. }
  27. int main()
  28. {
  29. fprime();
  30. int n,tmp,num_one=,num_ji=,num_ou=;
  31. scanf("%d",&n);
  32. for(int i=;i<n;i++){
  33. scanf("%d",&tmp);
  34. if(tmp==)num_one++;
  35. else if(tmp&)ji[num_ji++]=tmp;
  36. else ou[num_ou++]=tmp;
  37. }
  38. bool have_jiou=;
  39. int ans_ji,ans_ou;
  40. for(int i=;i<num_ji;i++){
  41. for(int j=;j<num_ou;j++){
  42. if(prime[ji[i]+ou[j]]==){
  43. have_jiou=;
  44. ans_ji=ji[i];ans_ou=ou[j];
  45. break;
  46. }
  47. }
  48. }
  49. bool have_oneou=;
  50. int ans_oneou;
  51. for(int i=;i<num_ou;i++){
  52. if(prime[ou[i]+]==){
  53. have_oneou=;
  54. ans_oneou=ou[i];
  55. break;
  56. }
  57. }
  58. num_one+=have_oneou;
  59. if(num_one>=){
  60. printf("%d\n",num_one);
  61. if(have_oneou)printf("%d ",ans_oneou);
  62. for(int i=;i<num_one-have_oneou;i++)printf("1 ");
  63. }
  64. else if(have_jiou){
  65. printf("2\n%d %d",ans_ou,ans_ji);
  66. }
  67. else{
  68. printf("1\n");
  69. if(num_ou)printf("%d\n",ou[]);
  70. else if(num_ji)printf("%d\n",ji[]);
  71. else printf("1\n");
  72. }
  73. }

Codeforces 665D Simple Subset [简单数学]的更多相关文章

  1. Codeforces 665D Simple Subset【构造】

    题目链接: http://codeforces.com/problemset/problem/665/D 题意: 给定序列,从中找出最大的子集,使得子集中的数两两相加均为质数. 分析: 貌似有用最大团 ...

  2. codeforces 665D Simple Subset

    题目链接 给一个数列, 让你选出其中的m个数, 使得选出的数中任意两个数之和都为质数, m尽可能的大. 首先, 除了1以外的任意两个相同的数相加结果都不是质数. 然后, 不考虑1的话, 选出的数的个数 ...

  3. CodeForces - 665D Simple Subset 想法题

    //题意:给你n个数(可能有重复),问你最多可以取出多少个数使得任意两个数之和为质数.//题解:以为是个C(2,n)复杂度,结果手摸几组,发现从奇偶性考虑,只有两种情况:有1,可以取出所有的1,并可以 ...

  4. CodeFores 665D Simple Subset(贪心)

    D. Simple Subset time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  5. Codeforces 626E Simple Skewness 「数学」「二分」

    题意: 给你一堆无序数,寻找它的一个子堆,使得子堆的平均数减中位数最大. 数字的个数n<=2e5 0<=xi<=1e6. 思路: 首先可以证明这堆数一定是奇数个,证明方法是尝试在奇数 ...

  6. Educational Codeforces Round 12 D. Simple Subset 最大团

    D. Simple Subset 题目连接: http://www.codeforces.com/contest/665/problem/D Description A tuple of positi ...

  7. coeforces 665D D. Simple Subset(最大团orsb题)

    题目链接: D. Simple Subset time limit per test 1 second memory limit per test 256 megabytes input standa ...

  8. HDU 5073 Galaxy (2014 Anshan D简单数学)

    HDU 5073 Galaxy (2014 Anshan D简单数学) 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5073 Description G ...

  9. 洛谷试炼场-简单数学问题-P1403 [AHOI2005]-因数

    洛谷试炼场-简单数学问题 P1403 [AHOI2005]约数研究 Description 科学家们在Samuel星球上的探险得到了丰富的能源储备,这使得空间站中大型计算机"Samuel I ...

随机推荐

  1. sklearn基础知识-准备阶段

    6.标签特征二元化 处理分类变量还有另一种方法,不需要通过OneHotEncoder,我们可以用LabelBinarizer. 这是一个阈值与分类变量组合的方法. In [1]: from sklea ...

  2. CentOS6.5系统挂载NTFS分区的移动硬盘 centos安装repoforge源(yum)

    CentOS6.5系统挂载NTFS分区的移动硬盘 作为IT的工作者,避免不了使用Linux系统,我现在使用的系统是CentOS6.5 X86_64位版本,但是插入NTFS移动硬盘没有办法识别.通过下面 ...

  3. 客户端TortoiseSVN的安装及使用方法

    一.客户端TortoiseSVN的安装 运行TortoiseSVN程序,点击Next,下面的截图顺序即为安装步骤: 图1: 图2: 图3: 图4: 点击Finish按钮后会提示重启系统,其实不重启也没 ...

  4. Oracle常用知识小结

    前言: 前一段时间项目开发数据库环境为Oracle,作为一个SQLer,表示各种不适应.所以刚开始的时候走了一些弯路,浪费了一席时间.因此就想把这些常用的东西给总结一下,算是对自己学习的总结,也希望能 ...

  5. adb failed to start daemon 的解决办法

    很多人遇到下面这个问题 * daemon not running. starting it now on port 5037 * ADB server didn't ACK<br>* fa ...

  6. 在网页标题栏上和收藏夹显示网站logo

    第一步,准备一个图标制作软件. 首先您必须了解所谓的图标(Icon)是一种特殊的图形文件格式,它是以.ico 作为扩展名.普通的图像设计软件无法使用这种格式,所以您需要到下载一个ico图标工具,本站常 ...

  7. CryptoAPI与openssl RSA非对称加密解密(PKCS1 PADDING)交互

    (以下代码中都只做测试用,有些地方没有释放内存...这个自己解决下) 1.RSA非对称的,首先提供一个供测试用的证书和私钥的数据 1)pem格式的证书和私钥(公私钥是对应的)的base64编码 voi ...

  8. HTML5常识总结(一)

    一.HTML5的发展历程 + html演变的几个版本: html2.0.html3.2.html4.0.html4.01.html5. + 其中在html4.01发布之后,还发布了xtml1.0,它是 ...

  9. MySQL数据库MyISAM和InnoDB存储引擎的比较

    MySQL有多种存储引擎,MyISAM和InnoDB是其中常用的两种.这里介绍关于这两种引擎的一些基本概念(非深入介绍). MyISAM是MySQL的默认存储引擎,基于传统的ISAM类型,支持全文搜索 ...

  10. oracle imp导入数据到另一个表空间

    http://blog.163.com/darlingchenlin@126/blog/static/7156283420100531431855/ 1.在第一个数据库导出数据:qlyg_xs_db_ ...