升级版3个:https://www.luogu.com.cn/problem/P1579 基础版2个:https://www.luogu.com.cn/problem/P1304

题目描述

输入一个偶数 ,验证 所有偶数是否符合哥德巴赫猜想:任一大于 的偶数都可写成两个质数之和。如果一个数不止一种分法,则输出第一个加数相比其他分法最小的方案。例如 ,则 是错误答案。

输入格式

第一行输入一个正偶数

输出格式

输出 行。对于第 行:

首先先输出正偶数 ,然后输出等号,再输出加和为 且第一个加数最小的两个质数,以加号隔开。

样例 #1

样例输入 #1

10

样例输出 #1

4=2+2
6=3+3
8=3+5
10=3+7

提示

数据保证,

思路

代码

```cpp
#define S second
#define F first
#define pb push_back
#define pf push_front
#define lson l, mid, u << 1
#define rson mid + 1, r, u << 1 | 1
#define MID l + r >> 1
#define mem(x,n) memset(x, n, sizeof x)
#define setPrec(n) cout << fixed << setpricision(n)
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
typedef long long LL;
using i64 = long long;
// #define debug
const int N = 1e6;
int n;
int primes[N], cnt;
bool st[N];
bool isprime[N];
 
void init()
{
    for(int i = 2; i <= N; i++)
    {
        if(!st[i])
        {
            primes[cnt++] = i;
            st[i] = true;
            isprime[i] = true;
        }
            
        for(int j = 0; primes[j] * i <= N; j++)
        {
            st[i * primes[j]] = true;
            if(i % primes[j] == 0) break;
        }
    }
}
 
void solve() {
    
    for(int a = 0; a < cnt; a++)
    {
        int p = primes[a];  
        int b = n - p;
        if(isprime[b]){
            printf("%d=%d+%d\n", n,p,b);
             break;
        }
            
    }
}
 
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    init();
    int T;
    cin >> T;
    for(int i = 4; i <= T; i++)
    {
        if(i & 1) continue;
        n = i;
        solve();
    }
    return 0;
}