題意:
給一個n個正整數序列
題解:
設一個滿足要求的子序列爲
如果
如果
設
結論:如果
所以首先判斷原數列
如果1的個數小於2,那麼
如果1的個數大於等於2,那麼把所有1都加入答案,並且再判斷是否存在一個數
#include<bits/stdc++.h>
using namespace std;
const int N = 2000005;
int a[1005];
bool prime[N];
void init(){
for(int i = 0; i < N; ++i) prime[i] = 1;
for(int i = 2; i < N; ++i){
if(!prime[i]) continue;
for(int k = 2; i*k < N; ++k){
prime[i*k] = 0;
}
}
}
int main(){
init();
int n;
cin >> n;
for(int i = 0; i < n; ++i) cin >> a[i];
sort(a, a+n);
int cot = 0;
for(int i = 0; i < n; ++i) if(a[i] == 1) cot += 1;
if(cot < 2){
int flag = 0;
for(int i = 0; i < n && !flag; ++i){
for(int j = i+1; j < n && !flag; ++j){
if(prime[a[i]+a[j]]){
printf("2\n%d %d", a[i], a[j]);
flag = 1;
}
}
}
if(!flag) printf("1\n%d", a[0]);
}
else{
int flag = 0;
for(int i = 0; i < n && !flag; ++i){
if(a[i] != 1 && prime[a[i]+1]){
printf("%d\n%d ", cot+1, a[i]);
flag = 1;
}
}
if(!flag) printf("%d\n", cot);
for(int i = 0; i < cot; ++i) printf("1 ");
}
cout << endl;
}