升级版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;
}