(2023牛客暑期多校训练营3-H)Until the Blue Moon Rises-题解

哥德巴赫猜想:任一大于5的整数都可写成三个质数之和。
由此可以得到两种情况:
1.强哥德巴赫猜想:任一大于2的偶数都可写成两个质数之和6=3+3......
(未被证明,但是同时也没有被推翻,即在本体的范围内强哥猜成立)
2.弱哥德巴赫猜想:任何一个大于5的奇数都能被表示成三个奇质数的和
(已经被证明)
本题有三种情况:
  1.n=1时,即第一个数a为质数时成立
  2.n=2时,可以分为两种情况:(1).和为偶数时,使用强哥德巴赫猜想。(2).和为奇数时,当
且仅当和sum-2为质数时成立,因为奇数只能由一个奇数和一个偶数相加得到,除了2以外的偶数
都不是质数,所以只能是2+a,即a为质数时才成立,所以减去2。
  3.n>2时,此时就可以运用弱哥德巴赫猜想了,如n=3时,只要和大于5,也就是和为6时是最小
的成立条件(2+2+2)。以此类推,只要满足和sum>=2*n即可。
 

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=2e5+5;
ll zhi(ll x)
{
    if(x==1) return 0;
    for(ll i=2;i<=sqrt(x);i++)
    {
        if(x%i==0)
            return 0;
    }
    return 1;
}
int main()
{
    ll n,sum=0,a[N];
    cin>>n;
    for(ll i=1;i<=n;i++)
    {
        cin>>a[i];
        sum+=a[i];
    }
    if(sum<2*n) cout<<"NO";
    else if(n==1)
    {
        if(zhi(sum)) cout<<"YES";
        else cout<<"NO";
    }
    else if(n==2&&sum%2==1)
    {
        if(zhi(sum-2)) cout<<"YES";
        else cout<<"NO";
    }
    else cout<<"YES";
    
    return 0;
}
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值