AcWing算法提高课-5.1.1哥德巴赫猜想

news2024/11/24 14:03:26

宣传一下 算法提高课整理

CSDN个人主页:更好的阅读体验

Start

原题链接

题目描述

哥德巴赫猜想的内容如下:

任意一个大于 4 4 4 的偶数都可以拆成两个奇素数之和。

例如:

8 = 3 + 5 8 = 3 + 5 8=3+5
20 = 3 + 17 = 7 + 13 20 = 3 + 17 = 7 + 13 20=3+17=7+13
42 = 5 + 37 = 11 + 31 = 13 + 29 = 19 + 23 42 = 5 + 37 = 11 + 31 = 13 + 29 = 19 + 23 42=5+37=11+31=13+29=19+23

现在,你的任务是验证所有小于一百万的偶数能否满足哥德巴赫猜想。

输入格式

输入包含多组数据。

每组数据占一行,包含一个偶数 n n n

读入以 0 0 0 结束。

输出格式

对于每组数据,输出形如 n = a + b,其中 a , b a,b a,b 是奇素数。

若有多组满足条件的 a , b a,b a,b,输出 b − a b-a ba 最大的一组。

若无解,输出 Goldbach's conjecture is wrong.

数据范围

输入最多包含 50006 50006 50006 组数据。
6 ≤ n < 1 0 6 6 \le n < 10^6 6n<106

输入样例:

8
20
42
0

输出样例:

8 = 3 + 5
20 = 3 + 17
42 = 5 + 37

思路

显然这是一道关于质数的题。

观察数据范围,我们发现,需要复杂度最高是 O ( n ) O(n) O(n) 的算法才能过。

所以我们考虑使用线性筛预处理出 1 ∼ 1 0 6 1 \sim 10^6 1106 的所有质数,然后从第一个开始枚举。
如果 p ∈ P p \in \mathbb{P} pP n − p ∈ P n-p \in \mathbb{P} npP,则输出。( P \mathbb{P} P 为质数集)

最后我们考虑无解的情况。

虽然哥德巴赫猜想没有被证明,但是通过我们暴力算法的验证,我们发现在 1 0 6 10^6 106 的范围内的哥德巴赫猜想 一定有解

所以即使你不考虑无解情况照样 AC \color{green}\text{AC} AC

但是作者因为考虑到题解的严谨性,还是写了无解情况的判断。具体细节请看代码。

算法时间复杂度

AC Code

C + + \text{C}++ C++

#include <iostream>

using namespace std;

const int N = 1e6 + 10;

int n;
int primes[N], cnt;
bool st[N];

void get_primes() // 线性筛质数
{
	st[1] = true; // 这里特殊处理1不是质数(我们用false表示质数)
    for (int i = 2; i < N; i ++ )
    {
        if (!st[i]) primes[cnt ++ ] = i;
        for (int j = 0; primes[j] <= N / i; j ++ )
        {
            st[primes[j] * i] = true;
            if (i % primes[j] == 0) break;
        }
    }
}

int main()
{
    get_primes(); // 处理 1 ~ 1e6 所有质数
    
    while (cin >> n && n)
    {
        bool flag = 0;
        for (int i = 1; primes[i] <= n; i ++ )
            if (!st[n - primes[i]]) // 如果n-primes[i]是质数就输出
            {
                printf("%d = %d + %d\n", n, primes[i], n - primes[i]);
                flag = 1;
                break;
            }
        if (!flag) puts("Goldbach's conjecture is wrong."); // 无解情况
    }
    
    return 0;
}

228aa7bed3e021faf24cf8560d3e47bb.gif

最后,如果觉得对您有帮助的话,点个赞再走吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/871119.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多线程与高并发--------原子性、可见性、有序性

二、并发编程的三大特性 一、原子性 1.1 什么是并发编程的原子性 JMM&#xff08;Java Memory Model&#xff09;。不同的硬件和不同的操作系统在内存上的操作有一定差异的。Java为了解决相同代码在不同操作系统上出现的各种问题&#xff0c;用JMM屏蔽掉各种硬件和操作系统带…

腾讯云CVM服务器2核2g1m带宽支持多少人访问?

腾讯云2核2g1m的服务器支持多少人同时访问&#xff1f;2核2g1m云服务器短板是在1M公网带宽上&#xff0c;腾讯云服务器网以网站应用为例&#xff0c;当大规模用户同时访问网站时&#xff0c;很大概率会卡在公网带宽上&#xff0c;所以压根就谈不上2核2G的CPU内存计算性能是否够…

[管理与领导-11]:IT基层管理者 - 目标与落实 - 过程管理失控,结果总难达成的问题思考:如何把过程管控做得更好?

目录 前言&#xff1a; 第1章 问题与现象 1.1 总有意想不到的事发生&#xff1a;意外事件 1.2 总有计划变更&#xff1a;意外影响 1.3 总有一错再错&#xff0c;没有复盘、总结与反思&#xff0c;没有流程与改进 第2章 背后的原因 2.1 缺乏及时的过程检查 - 缺乏异常检测…

机器学习 | Python实现KNN(K近邻)模型实践

机器学习 | Python实现KNN(K近邻)模型实践 目录 机器学习 | Python实现KNN(K近邻)模型实践基本介绍模型原理源码设计学习小结参考资料基本介绍 一句话就可以概括出KNN(K最近邻算法)的算法原理:综合k个“邻居”的标签值作为新样本的预测值。更具体来讲KNN分类过程,给定一个训…

基于SSM的小型仓库库存管理系统

C00142基于SSM的小型仓库库存管理系统 项目简介项目获取开发环境项目技术运行截图 项目简介 该系统有三类用户分别是管理员、员工、客户。 管理员&#xff08;登陆后台&#xff09;&#xff1a;可以对以上6个模块进行相应操作&#xff0c;还可以修改自己的密码。 员工&#xf…

最新版高效多元化广告联盟系统源码,实时监控移动广告联盟,支持多种广告效果

诚丰广告联盟系统是一款强大的广告联盟解决方案&#xff0c;旨在提高网站在百度搜索引擎中的排名和可见性。我们的系统具有以下特点&#xff1a; 1. 高负载能力&#xff1a;我们的服务器每天能够承载至少200万个PV流量&#xff0c;保证您的网站能够稳定运行&#xff0c;并提供…

考研408 | 【计算机网络】 网络层

导图 网络层&#xff1a; 路由器功能&#xff1a;转发&路由选择 数据平面 数据平面执行的主要功能是根据转发表进行转发&#xff0c;这是路由器的本地动作。 控制平面 1.传统方法/每路由器法&#xff1a; 2.SDN方法&#xff08;Software-Defined Networking) 控制平面中的…

MySQL_SQL优化

SQL优化 插入数据优化 顺序插入代替乱序插入 data:1,2,3,4,5,6,7 data:4,3,1,6,5,2,7批量插入代替单个数据插入 INSERT INTO test VALUES (1000, 软件工程-1000); INSERT INTO test VALUES (10000, 软件工程-10000); INSERT INTO test VALUES (100000, 软件工程-100000);INSER…

普通人怎样拥抱AI时代?这几点最为重要!

一、拒绝还是接受&#xff1f; 当纽约公立学校严禁学生用ChatGPT写论文之后&#xff0c;沃顿商学院的教授Ethan Mollick却开始鼓励自己的学生用ChatGPT来写论文。 图源于网络 试想一下&#xff0c;当所有学生都可以用ChatGPT写论文&#xff0c;大家的分数会有明显差别吗?一定…

Java中声明,定义,分配内存,初始化,赋值,是啥?

一. 声明&#xff0c;定义和分配内存 在Java中&#xff0c;声明和定义是同一个意思&#xff0c;不做区分。下面这些都是声明&#xff08;定义&#xff09;一个变量。 栈&#xff1a;存放局部变量&#xff08;包括基本数据类型的变量和对象的引用&#xff09; 堆&#xff1a;存…

Expo项目 使用Native base UI库

装包&#xff1a; yarn add native-base expo install react-native-svg12.1.1 Index.js: import React from react import { View, Text } from react-native import useList from ./useList import { NativeBaseProvider, Button, Box } from native-base import styles f…

「C/C++」C/C++可变参数函数

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C」C/C程序设计「Win」Windows程序设计「DSA」数据结构与算法「File」数据文件格式 目录 当你需要…

机器学习深度学习——seq2seq实现机器翻译(详细实现与原理推导)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——seq2seq实现机器翻译&#xff08;数据集处理&#xff09; &#x1f4da;订阅专栏&#xff1a;机器学习&…

明月之刃:armbian巧借nmtui管理网络连接

文章目录 nmtui简介安装nmtuinmtui使用连接wifi设置主机名称 nmtui简介 nmtui是NetworkManager TUI&#xff08;Text User Interface&#xff09;的缩写&#xff0c;它提供了一个可视化的界面来管理网络连接。但是&#xff0c;在Debian系统中&#xff0c;没有默认安装nmtui工具…

Vue电商项目--组件通信

组件通信6种方式 第一种&#xff1a;props 适用于的场景&#xff1a;父子组件通信 注意事项&#xff1a; 如果父组件给子组件传递数据&#xff08;函数&#xff09;&#xff1a;本质其实是子组件给父组件传递数据 如果父组件给子组件传递的数据&#xff08;非函数&#xf…

SpringBoot3集成Quartz

标签&#xff1a;Quartz.Job.Scheduler&#xff1b; 一、简介 Quartz由Java编写的功能丰富的开源作业调度框架&#xff0c;可以集成到几乎任何Java应用程序中&#xff0c;并且能够创建多个作业调度&#xff1b; 在实际的业务中&#xff0c;有很多场景依赖定时任务&#xff0c…

438. 找到字符串中所有字母异位词---字典匹配滑动窗口才是最优解

438. 找到字符串中所有字母异位词 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;一开始字典匹配 参考代码&#xff1a;错误傻逼代码AC代码 原题链接&#xff1a; 438. 找到字符串中所有字母异位词 https://leetcode.cn/problems/find-all-anagrams-in-a-st…

CUDA执行模型

一、CUDA执行模型概述 二、线程束执行 1. 线程束与线程块 线程束是SM中基本的执行单元。 当一个线程块的网格被启动后&#xff0c;网格中的线程块分布在SM中。 一旦线程块被调度到一个SM中&#xff0c;线程块中的线程会被进一步划分成线程束。 一个线程束由32个连续的线程…

week4刷题

题解: F(n)F(n−1)F(n−2) 由于斐波那契数存在递推关系&#xff0c;因此可以使用动态规划求解。动态规划的状态转移方程即为上述递推关系&#xff0c;边界条件为 F(0)F(0)F(0) 和 F(1)F(1)F(1)。 class Solution { public:int fib(int n) {int MOD 1000000007;if (n < 2)…

Nginx 安装与部署

文章和代码已经归档至【Github仓库&#xff1a;https://github.com/timerring/front-end-tutorial 】或者公众号【AIShareLab】回复 nginx 也可获取。 文章目录 虚拟机安装CentOS7.4Linux配置配置上网配置静态ip Nginx的安装版本区别备份克隆 安装编译安装报错解决 启动Nginx防…