codeforces 665D Simple Subset
2016-04-21 08:54
441 查看
题目链接
给一个数列, 让你选出其中的m个数, 使得选出的数中任意两个数之和都为质数, m尽可能的大。首先, 除了1以外的任意两个相同的数相加结果都不是质数。
然后, 不考虑1的话, 选出的数的个数不大于2。
假设我们选了3个数, a1, a2, a3。 a1+a2是质数的话, 那么a1, a2中一个为奇数一个为偶数。 那么如果a3无论为奇数或偶数都无法满足条件了。
所以我们按1出现的次数分类讨论一下就好了。
#include <iostream> #include <vector> #include <cstdio> #include <cstring> #include <algorithm> #include <complex> #include <cmath> #include <map> #include <set> #include <string> #include <queue> #include <stack> #include <bitset> using namespace std; #define pb(x) push_back(x) #define ll long long #define mk(x, y) make_pair(x, y) #define lson l, m, rt<<1 #define mem(a) memset(a, 0, sizeof(a)) #define rson m+1, r, rt<<1|1 #define mem1(a) memset(a, -1, sizeof(a)) #define mem2(a) memset(a, 0x3f, sizeof(a)) #define rep(i, n, a) for(int i = a; i<n; i++) #define fi first #define se second typedef complex <double> cmx; typedef pair<int, int> pll; const double PI = acos(-1.0); const double eps = 1e-8; const int mod = 1e9+7; const int inf = 1061109567; const int dir[][2] = { {-1, 0}, {1, 0}, {0, -1}, {0, 1} }; int prime[2000006], a[1005], cnt[1000005]; void init() { prime[1] = 1; for(int i = 2; i <= 2000000; i++) { if(!prime[i]) { for(int j = i+i; j <= 2000000; j+=i) prime[j] = 1; } } } int main() { init(); int n; cin>>n; for(int i = 0; i < n; i++) { scanf("%d", &a[i]); cnt[a[i]]++; } if(cnt[1]>1) { int ans = -1; for(int j = 0; j < n; j++) { if(!prime[a[j]+1]&&a[j]!=1) { ans = j; break; } } cout<<cnt[1]+(ans>=0)<<endl; for(int i = 0; i < cnt[1]; i++) printf("1 "); if(ans>=0) cout<<a[ans]<<endl; } else { for(int i = 0; i < n; i++) { for(int j = i+1; j < n; j++) { if(!prime[a[i]+a[j]]) { cout<<2<<endl; cout<<a[i]<<" "<<a[j]<<endl; return 0; } } } for(int i = 0; i < n; i++) { if(!prime[a[i]]) { cout<<1<<endl; cout<<a[i]<<endl; return 0; } } cout<<1<<endl<<a[0]<<endl; } return 0; }
相关文章推荐
- 计算机大端模式和小端模式 内存对齐问题(sizeof)[密码学哈希密码部分参考]
- 日期格式转化
- 第七周项目-用多文件组织多个类的程序2.role.cpp:定义角色类的成员函数
- Rust 1.8 发布,放弃了 Unix 系统传统 Make 编译系统
- 面向对象编程
- redis的初认识
- 137. Single Number II
- swfupload学习
- TestNG 学习总结 - 参数化测试(十二)
- IOS学习之——用NSUserDefaults保存和读取程序设置
- asp.net js与后台C#代码相互调用
- 1到n的和、阶乘以及阶乘的和
- 第8周项目1
- 第一篇文章 用来测试
- 第八周项目-建立一个简单的学生信息表
- 第七周项目3-用多文件组织多个类的程序1.game.h:类声明
- STM32F4毕业设计(1)
- 第8周项目1 数组做数据成员 工资类(1)
- Java中的接口知识汇总
- 你真的会用Context么?