当前位置: 首页 > news >正文

信息学奥赛一本通 1622:Goldbach’s Conjecture | 洛谷 UVA543 Goldbach‘s Conjecture

【题目链接】

ybt 1622:Goldbach’s Conjecture
洛谷 UVA543 Goldbach’s Conjecture

【题目考点】

1. 筛法求质数表
  • 埃筛
  • 线性筛(欧拉筛)
    知识点讲解见信息学奥赛一本通 2040:【例5.7】筛选法找质数

【解题思路】

首先使用埃筛或线性筛求出质数表。
包括isPrime数组,isPrime[i]表示数值i是否是质数。以及prime数组,prime[i]保存第i个质数,pn是保存在prime数组中的质数的个数。
判断整数n是否可以写成两个奇素数的加和,枚举第一个较小的奇素数。prime[1]是2,是偶数,略过。i从2循环到pn,第一个奇素数为prime[i],而该数是相加的两个素数中的较小的数,因此该数需要满足不超过n的一半,即需要满足prime[i] <= n/2。第一个奇素数是prime[i],要想使两个数加和为n,则第二个数为n-prime[i],判断第二个数是否是素数,可以使用前面求出的isPrime数组,isPrime[n-prime[i]]表示n-prime[i]是否为素数。如果第二个数也是素数,则输出n等于两个数相加的公式,并跳出循环。

虽然哥的巴赫猜想还没有被证明,但在题目给定的范围找到一个偶数不满足哥的巴赫猜想是不可能的,如果你找到了哥的巴赫猜想的反例,都可以得菲尔兹奖了。所以不需要考虑无解的情况。

【题解代码】

解法1:埃筛求质数表

#include <bits/stdc++.h>
using namespace std;
#define N 1000005
bool isPrime[N];
int prime[N], pn;
void initPrime(int n)
{memset(isPrime, 1, sizeof(isPrime));for(int i = 2; i*i <= n; ++i) if(isPrime[i])for(int j = i*i; j <= n; j += i)isPrime[j] = false;for(int i = 1; i <= n; ++i) if(isPrime[i])prime[++pn] = i;
}
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr); initPrime(1e6);int n;while(cin >> n && n != 0){for(int i = 2; i <= pn && prime[i] <= n/2; ++i) if(isPrime[n-prime[i]]){	cout << n << " = " << prime[i] << " + " << n-prime[i] << '\n';break;}}return 0;
}

解法2:线性筛求质数表

#include <bits/stdc++.h>
using namespace std;
#define N 1000005
bool isPrime[N];
int prime[N], pn;
void initPrime(int n)
{memset(isPrime, 1, sizeof(isPrime));for(int i = 2; i <= n; ++i){if(isPrime[i])prime[++pn] = i;for(int j = 1; j <= pn && i*prime[j] <= n; ++j){isPrime[i*prime[j]] = false;if(i%prime[j] == 0)break;}}
}
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr); initPrime(1e6);int n;while(cin >> n && n != 0){for(int i = 2; i <= pn && prime[i] <= n/2; ++i) if(isPrime[n-prime[i]]){	cout << n << " = " << prime[i] << " + " << n-prime[i] << '\n';break;}}return 0;
}

相关文章:

  • 【HDFS入门】HDFS与Hadoop生态的深度集成:与YARN、MapReduce和Hive的协同工作原理
  • 深度监听 ref 和 reactive 的区别详解
  • Spring Boot 实现 Excel 导出功能(支持前端下载 + 文件流)
  • ⭐ Unity 使用Odin Inspector增强编辑器的功能:UIManager脚本实例
  • React 对state进行保留和重置
  • 【gpt生成-其一】以go语言为例,详细描述一下 ​:语法规范​​BNF/EBNF形式化描述
  • 基于深度学习并利用时间信息在X射线血管造影中进行冠状动脉血管分割|文献速递-深度学习医疗AI最新文献
  • 【gpt生成-总览】怎样才算开发了一门编程语言,需要通过什么测试
  • 【OSCP-vulnhub】GoldenEye
  • 【专业解读:Semantic Kernel(SK)】大语言模型与传统编程的桥梁
  • v-model进阶+ref+nextTick
  • 爱普生FA2016AS晶振在智能家居中的应用
  • vue3项目启动bug
  • GitHub 从入门到精通完全指南(2025版)
  • 【FPGA】【DE2-115】DDS信号发生器设计
  • 游戏引擎学习第229天
  • RAG(检索增强生成)、ReAct(推理与行动) 和 多模态AI 的详细解析,包括三者的定义、工作原理、应用场景及协同关系
  • docker能用来干什么的
  • 在Web3中实现数据保护的最佳实践
  • 容器化爬虫部署:基于K8s的任务调度与自动扩缩容设计
  • “80后”萍乡市安源区区长邱伟,拟任县(区)委书记
  • 四川甘孜炉霍县觉日寺管委会主任呷玛降泽被查
  • 曾犯强奸罪教师出狱后办教培机构?柳州鱼峰区教育局回应
  • 消息人士称泽连斯基已启程前往土耳其
  • 警方通报:某博主遭勒索后自杀系自导自演,已立案调查
  • 学者纠错遭网暴,人民锐评:“饭圈”该走出畸形的怪圈了