题解 P1579 【哥德巴赫猜想(升级版)】

· · 题解

//翻看了一下各位大犇的代码,好像没有和我一样的,鼓起勇气发一篇题解//代码有点短。

这个题目求任意一个大于九的奇数等于三个质数的和,题目说明了第一个质数要最小,其次第二个,据此可以进行优化循环的次数。然后就是进入正题了 ,首先先要明白一件事,三个数相加为奇数,只有两种可能

①两个偶数加一个奇数.

②三个奇数.

①先判断前两个质数都是偶数的情况,因为偶数中只有2是素数,那么就只要判断这个(n-4)是否为素数,如果是,就直接输出2,2,n-4。

②如果这三个数都是质数,那么从i=3开始循环,并保证i为奇数并且i为素数,再在第二重循环里面让j=i并保证j为奇数且j为素数,最后只要判断(n-i-j)是否为奇数且为素数就行了,满足就输出答案。

#include<bits/stdc++.h>
using namespace std;
int check(int x){
    for (int i=2;i*i<=x;i++)
    if(x%i==0) return 0;
    return 1;
}
int main(){
    int n;
    cin>>n;
    if(check(n-4)) {
    cout<<"2 "<<"2 "<<n-4;
    return 0;
    }     //第一种情况
    for (int i=3;i<n;i++)//第二种情况
    if((i%2)!=0&&check(i))//优化
    for (int j=i;j<n;j++)
        if((j%2)!=0&&check(j))//优化
        if(check(n-i-j)) {
        cout<<i<<" "<<j<<" "<<n-i-j;return 0;//不用循环第三个数,优化。
        }

}