#zSybttg060204. 1622:Goldbach’s Conjecture
1622:Goldbach’s Conjecture
1622:Goldbach’s Conjecture
题目描述
哥德巴赫猜想:任何大于 的偶数都可以拆成两个奇素数之和。 比如:
你的任务是:验证小于 的数满足哥德巴赫猜想。
输入格式
多组数据,每组数据一个 。
读入以 结束。
输出格式
对于每组数据,输出形如 n = a + b,其中 是奇素数。若有多组满足条件的 ,输出 最大的一组。
若无解,输出 "Goldbach’s conjecture is wrong."。
样例
样例输入 #1
8
20
42
0
样例输出 #1
8 = 3 + 5
20 = 3 + 17
42 = 5 + 37
样例解释 #1
- :,且 是最大差值(只有一组)。
- :有 和 ,差值分别为 和 ,选择 。
- :有 、、、,差值分别为 、、、,选择 。
数据范围
对于全部数据,。
时空限制
- 时间限制:1000 ms
- 内存限制:524288 KB
注意:本题需要预处理 以内的所有素数(可以用埃氏筛或线性筛)。然后对于每个偶数 ,从最小的奇素数 开始枚举 ,检查 和 是否都是素数。由于要求 最大,即 尽可能小(因为 ,差值 , 越小差值越大),所以找到第一个满足条件的 即可。注意 和 必须是奇素数,因此 从 开始,每次增加 (因为偶数除了 都不是素数,而 是偶素数,但题目要求奇素数,所以 不能是 )。
如果找不到这样的 ,则输出错误信息。但根据哥德巴赫猜想,在 范围内应该都有解。
时间复杂度:预处理素数 ,每次查询 枚举 。由于 最大 ,且多组数据,可能超时。优化:可以只枚举素数,而不是所有奇数。可以用一个布尔数组 is_prime 记录每个数是否为素数,然后枚举素数 ,直到 。因为如果 ,则 ,但我们可以要求 以避免重复,且差值最大时 最小,所以 。