#H题 Until the Blue Moon Rises

由哥德巴赫猜想可知:
1.对于一个大于5的数而言,可以将其分为三个质数之和。
2.对于一个大于2的偶数而言,可以将其分解为两个质数之和。
综合题目可知可以对其进行分类讨论得:
1.n=1时,特殊判定是否为质数。
2.n=2时,首先判断两数之和为质数还是偶数。
如果两数之和为偶数,且和为2,不成立;如果两数之和为偶数,且和大于2,成立。
如果两数之和为奇数,则必须为2,x-2的形式,所以要判断x-2是否为质数。
3.n>2时,使用哥德巴赫猜想就ok了。
下面小编呈上代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=1e6+10,mod=1e9+7,R=1e6;
const int inf=1e9;

int isP(LL n){
    if(n<2)return 0;
    for(LL i=2;i*i<=n;i++){
        if(n%i==0){
            return 0;
        }
    }
    return 1;
}
void solve() {
    int n;
    cin>>n;
    vector<int>a(n);
    for(int i=0;i<n;i++)cin>>a[i];
    LL sum=0;
    for(int i=0;i<n;i++)sum+=a[i];

    if(n==1){
        if(isP(sum)){
            cout<<"Yes\n";
        }else{
            cout<<"No\n";
        }
    }else if(n==2){
        if(sum%2==0){
            if(sum==2)cout<<"No\n";
            else cout<<"Yes\n";
        }else{
            if(isP(sum-2))cout<<"Yes\n";
            else cout<<"No\n";
        }
    }else{
        if(sum-2*(n-3)>5)cout<<"Yes\n";
        else cout<<"No\n";
    }
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int T=1;
    // cin>>T;
    while(T--) {
        solve();
    }
    return 0;
}