OJ Goldbach‘s Conjecture

news2025/1/11 21:09:43

1.题目

题目描述

        In 1742, Christian Goldbach, a German amateur mathematician, sent a letter to Leonhard Euler in which he made the following conjecture: 
Every even number greater than 4 can be written as the sum of two odd prime numbers.
        For example: 
                8 = 3 + 5. Both 3 and 5 are odd prime numbers. 
                20 = 3 + 17 = 7 + 13. 
                42 = 5 + 37 = 11 + 31 = 13 + 29 = 19 + 23.
        Today it is still unproven whether the conjecture is right. (Oh wait, I have the proof of course, but it is too long to write it on the margin of this page.) 
        Anyway, your task is now to verify Goldbach's conjecture for all even numbers less than a million. 

输入

        the input will contain one or more test cases. 
        Each test case consists of one even integer n with 6 <= n < 1000000. 
        Input will be terminated by a value of 0 for n.

输出

        For each test case, print one line of the form n = a + b, where a and b are odd primes. Numbers and operators should be separated by exactly one blank like in the sample output below. If there is more than one pair of odd primes adding up to n, choose the pair where the difference b - a is maximized. If there is no such pair, print a line saying "Goldbach's conjecture is wrong."

样例输入

8
20
42
0

样例输出

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

2.中文翻译

题目描述

        1742年,德国业余数学家克里斯蒂安·戈德巴赫写信给莱昂哈德·欧拉,他在信中做出了以下猜想:每个大于4的偶数都可以写成两个奇数素数的和。

        例如:

        8=3+5。3和5都是奇数素数

        20=3+17=7+13

        42=5+37=11+31=13+29=19+23。

        今天,这个猜想是否正确还未得到证实。(哦,等等,我当然有证据,但太长了,不能写在这页的页边空白处。)

        不管怎样,你现在的任务是验证所有小于一百万的偶数的哥德巴赫猜想。

输入

        输入将包含一个或多个测试用例

        每个测试用例由一个偶数整数n组成,其中6<=n<100000

        输入将由n的值0终止。

输出

        对于每个测试用例,打印一行形式为n=a+b,其中a和b是奇素数。数字和运算符应该像下面的示例输出中那样用一个空格分隔。如果有一对以上的奇数素数加起来为n,则选择差值b-a最大的一对。如果没有这样的配对,则输出: "Goldbach's conjecture is wrong."

样例输入

8
20
42
0

样例输出

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

3.思路解析

        1.首先必须搞清楚欧拉筛的作用和代码实现 :视频讲解

        (这很重要!!!搞不懂就别看下面的了省的浪费时间

        怎样才算搞懂了,就是你心里可以自己算出下面张表的时候(n=29):

                  

 

        2.素数打表:把小于n的素数找出来并保存在列表primes中(利用欧拉筛)

        3.然后遍历primes从小到大

        4.遍历的原则是,判断i 和 n-i是否都在这个表中 。

        5.下面的代码是利用一个欧拉筛判断n是否是素数输出最小素数因子的程序:思路讲解

def euler_sieve(): #欧拉筛
    for i in range(2,m+1):
        if status[i]:
            if n % i == 0:
                return i
            primes.append(i)
        for pj in primes:
            if pj * i >m:
                break
            status[pj*i]= False
            if i % pj == 0:
                break
    return False

while True:
    n =int(input("请输入一个正整数(0退出):"))
    m=int(sqrt(n))
    primes= []
    status= [False]*2 + [True] *(m-1)
    pr= euler_sieve()
    if pr:
        print("{}不是素数,最小素因子是{}".format(n,pr))

                如果是素数 就不输出 返回 True 如果不是素数就返回False :

                                       

 4.欧拉筛的作用

        1.提高代码效率

        2. 快速地找出小于或等于给定上限的所有素数,并且可以在较短的时间内计算

            出大量素数。使用欧拉筛,我们可以通过逐步排除合数的方式来确定素数。

        3.实现思路:传送锚点

                (1).首先准备一个状态list:status ,status的前两个初始是False 对于0和1,后面

                    初始都是True

                (2).status[i] 为True时:表示i是素数 反之就是合数

                (3).然后用i遍历 2 到 n ,判断n以内的i是不是素数,是素数就改变状态

                (4).核心思想是利用最小素数因子排除素数:

                        只要一个数是素数的倍数,那么这个数一定是合数

                (5).最小素数因子的概念:15的素数因子是3 5 ,所以最小素数因子是 3 

5.代码(Python)

#利用欧拉筛 快速筛选包含n的n以内的所有素数
def euler_sieve(n):
    primes=[]
    status = [False] * 2 + [True] * (n - 1)
    for i in range(2,n+1):
        if status[i]:
            primes.append(i)
        for pj in primes:
            if pj * i >n:
                break
            status[pj*i]= False
            if i % pj == 0:
                break
    return primes

while True:
    n =int(input())
    if n ==0:
        break
    else:

        #kk表示筛选好的素数表
        kk=euler_sieve(n)

        #madiff表示当前最大差值
        maxdiff=0

        #maxlist用来保存每个最大差值所对应的i,i以append的方式添加在末位,所以遍历结束之后,末位的i一定就是我们要找的i
        maxlist=[]
        for i in kk:
            if n-i in kk:
                if abs(n-i-i)>maxdiff:
                    maxdiff=abs(n-i-i)
                    maxlist.append(i)
    maxi=maxlist.pop()
    print("{0} = {1} + {2}".format(n,maxi,n-maxi))






  

 

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

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

相关文章

可调电源LM317 的内部原理 - 特殊的电压跟随器

之前一直没想过这类LDO 内部是怎么整的&#xff0c;它似乎是用一个分压电路采集它输出的电压作为参考&#xff0c;然后却能把输出电压稳定下来&#xff0c;颇有种左脚踩右脚上天的意思。典型的LM317 电路如下&#xff1a; 如果是个普通的电压跟随器&#xff0c;无论是基于三极管…

K8S之istio流量控制管理(十七)

一&#xff0c;istio介绍 1、istio架构 结合上图我们来理解Istio的各组件的功能及相互之间的协作方式。 1. 自动注入&#xff1a;在创建应用程序时自动注入 Sidecar代理Envoy程序。在 Kubernetes中创建 Pod时&#xff0c;Kube-apiserver调用控制面组件的 Sidecar-Injector服…

4年外包上岸,想劝大家:这类公司能不去就不去...

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

Vector-常用CAN工具 - Network-Based Access常见问题

目录 一、什么是基于网络的访问&#xff1f; 二、为什么是基于网络的访问&#xff1f; 三、Channel-based如何变更为Network-based 四、VN5000系列设备端口分配 五、常见问题及解决办法 如何导出以太网的设备配置&#xff1f;&#xff08;Network-Base&#xff09; 1、导…

Backbone 在神经网络中意味着什么?

动动发财的小手&#xff0c;点个赞吧&#xff01; 1. 简介 神经网络是机器学习算法&#xff0c;我们可以将其用于许多应用&#xff0c;例如图像分类、对象识别、预测复杂模式、处理语言等等。神经网络的主要组成部分是层和节点。 一些神经网络架构有一百多个层和几个解决不同子…

[CubeMX项目]基于STM32的平衡小车(硬件设计)

一直以来我都想在本科毕业前完成一个电机相关的实验&#xff0c;之前看了网上比较火热的自平衡莱洛三角形项目后&#xff0c;决心先做一个类似的小项目。因此&#xff0c;我通过学习大量前辈的项目案例&#xff0c;完成了该项目。 本项目的特点是&#xff1a;在需要通信的部分&…

CMU 15-445 Project #1 - Buffer Pool(Task #3 - Buffer Pool Manager Instance)

Task #3 - Buffer Pool Manager Instance 一、题目链接二、准备工作三、部分实现 一、题目链接 二、准备工作 见 CMU 15-445 Project #0 - C Primer 中的准备工作。 三、部分实现 首先要区分缓冲池中 Page 与 Frame &#xff0c;这个其实和操作系统分页管理中页面和页框的关系…

尚硅谷微信小程序开发 防网易云音乐App 小程序 后端接口服务器搭建

小程序学习 尚硅谷微信小程序开发 项目网易云小程序学习地址&#xff1a; 01-尚硅谷-小程序-课程介绍_哔哩哔哩_bilibili 视频相关的教程文档与笔记分享 链接&#xff1a;https://pan.baidu.com/s/1aq7ks8B3fJ1Wahge17YYUw?pwd7oqm 提取码&#xff1a;7oqm 配套服务器 老师…

C语言总结

C语言 预处理&#xff08;以#开头&#xff09; 宏定义 宏可以理解为替换&#xff0c;替换过程不会进行语法检查&#xff0c;语法检查在编译时进行。只替换只替换只替换 1.不带参数的宏定义&#xff1a; 宏定义又称为宏代换、宏替换&#xff0c;简称“宏”。实质为直接替换&…

java面经03-虚拟机篇-jvm内存结构垃圾回收、内存溢出类加载、引用悲观锁HashTable、引用finalize

文章目录 虚拟机篇1. JVM 内存结构2. JVM 内存参数3. JVM 垃圾回收4. 内存溢出5. 类加载6. 四种引用7. finalize 虚拟机篇 1. JVM 内存结构 要求 掌握 JVM 内存结构划分尤其要知道方法区、永久代、元空间的关系 结合一段 java 代码的执行理解内存划分 执行 javac 命令编译源…

力扣 2719. 统计整数数目

题目地址&#xff1a;https://leetcode.cn/problems/count-of-integers/ 递归核心是枚举统计&#xff0c;结合记忆化搜索节省时间。 以数字 3216 为例&#xff0c;从 [0, 0, 0, 0] 开始枚举&#xff0c;到 [2, 1, 6, X] 时&#xff0c;i 2&#xff0c;sum 2 1 6 9&#x…

Meta语音达LLaMA级里程碑!开源MMS模型可识别1100+语言

【新智元导读】Meta的大规模多语言语音 &#xff08;MMS&#xff09; 项目将彻底改变语音技术&#xff0c;使用wav2vec 2.0的自监督学习&#xff0c;MMS将语音技术扩展到1100到4000种语言。 在语音方面&#xff0c;Meta又达到了另一个LLaMA级的里程碑。 今天&#xff0c;Meta推…

Linux驱动:I2C驱动看这一篇就够了

I2C驱动看这一篇就够了 一、前言二、Linux 的 I2C 体系结构2.1 Linux I2C 核心2.2 Linux I2C 适配器驱动2.3 Linux I2C 设备驱动2.4 Linux I2C驱动总结 三、具体设备驱动分析3.1 Probe函数3.2 读写函数 四、I2C驱动中几个重要的结构体4.1 i2c_adapter 结构体4.2 i2c_client 结构…

管理类联考——英语——技巧篇——必考高频词组

考研英语必考高频词组 【介词名词形式】 第一组 by accident 偶然 on account of 因为&#xff0c;由于 in addition 另外 in addition to 除……之外 in the air 在流行中&#xff0c;在传播中 on (the/an) average 平均&#xff0c;一般来说 on the basis o…

华为的数通认证考试难不难?考试费用是多少?

自从网络出现在我们的世界后&#xff0c;人类社会发生了巨大的变化&#xff0c;我们每个人的生活和网络息息相关&#xff0c;传统的购物、出行、社交方式发生了巨大的变化&#xff0c;这一切都离不开数通技术的支持&#xff0c;数通一般是指计算机通信网络中数据信号的基带传输…

春招面了个字节拿 36K 出来的,让我见识到了基础的天花板

今年的春招基本已经进入大规模的开奖季了&#xff0c;很多小伙伴收获不错&#xff0c;拿到了心仪的 offer。 各大论坛和社区里也看见不少小伙伴慷慨地分享了常见的面试题和八股文&#xff0c;为此咱这里也统一做一次大整理和大归类&#xff0c;这也算是划重点了。 俗话说得好…

Unity中Camera参数—Culling Mask详解

Culling Mask 如下图所示&#xff1a; 显示层级如下&#xff1a; 应用&#xff1a; Culling Mask &#xff1a;主要是相机针对不同层级的物体进行渲染的操作&#xff08;想让相机渲染哪个层就勾选哪个层&#xff09; 层级介绍&#xff1a; unity中的层前7个被unity锁定&#…

第三篇:分治算法

第三篇&#xff1a;分治算法 1. 分治算法简介2. 递归算法框架模板3. 分治演示代码4. 递归算法经典案例 分治算法的思想是将大问题分解成小问题&#xff0c;解决完一个一个小问题便解决了大问题。比如&#xff0c;我们想从杭州出发到徐州&#xff0c;可以分解成杭州到南京&#…

科技云报道:济南公交热线96190背后的“数字力量”

科技云报道原创。 “喂&#xff0c;公交公司吗&#xff1f;我的手提包落在63路车上了&#xff0c;能帮我找一下吗&#xff1f;” “我们小区距离公交站比较远&#xff0c;能增加个公交线路吗&#xff1f;” “等了半天车都不来&#xff0c;公交车为啥这么难等&#xff1f;”…

计算机网络实验---思科模拟器

文章目录 1. 组建小型局域网2. 交换机的配置与管理实验3&#xff1a;交换机划分 Vlan实验4&#xff1a;路由器的基本配置实验5&#xff1a;静态路由实验7&#xff1a;动态路由 1. 组建小型局域网 需要一台交换机&#xff0c;两台PC&#xff0c;连线连起来 配置 PC0 和 PC1 配置…