哥德巴赫猜想——偶数

简介: 将6-99之间的偶数都表示成两个素数之和,输出时每行输出5组。

1. 问题描述

将6-99之间的偶数都表示成两个素数之和,输出时每行输出5组。

1742年,哥德巴赫给欧拉的信中提出了以下猜想:任一大于2的整数都可写成三个质数之和。但是哥德巴赫自己无法证明它,于是就写信请教赫赫有名的大数学家欧拉帮忙证明,然而一直到死,欧拉也无法证明。因现今数学界已经不使用“1也是素数”这个约定,哥德巴赫猜想的现代陈述为:任一大于5的整数都可写成两个质数之和。(n>5:当n为偶数,n=2+(n-2),n-2也是偶数,可以分解为两个质数的和;当n为奇数,n=3+(n-3),n-3也是偶数,可以分解为两个质数的和)。欧拉在回信中也提出另一等价版本,即任一大于2的偶数都可写成两个质数之和。把命题"任一充分大的偶数都可以表示成为一个素因子个数不超过a的个数与另一个素因子不超过b的个数之和"记作"a+b"。1966年陈景润证明了"1+2"成立,即"任一充分大的偶数都可以表示成二个素数的和,或是一个素数和一个半素数的和"。今日常见的猜想陈述为欧拉的版本,即任一大于2的偶数都可写成两个素数之和,亦称为“强哥德巴赫猜想”或“关于偶数的哥德巴赫猜想”。从关于偶数的哥德巴赫猜想,可推出:任何一个大于7的奇数都能被表示成三个奇质数的和。后者称为“弱哥德巴赫猜想”或“关于奇数的哥德巴赫猜想”。若关于偶数的哥德巴赫猜想是对的,则关于奇数的哥德巴赫猜想也会是对的。2013年5月,巴黎高等师范学院研究员哈洛德·贺欧夫各特发表了两篇论文,宣布彻底证明了弱哥德巴赫猜想。

2. 解题思路

  • 输出时每行输出5组,可以记录输出次数后换行输出
  • 遍历6-99中的所有数,for循环
  • 判断是否是素数的方法已经出现过很多次了

3. 解题方法

a = [2]
for i in range(3, 100):
    b = 0
    for j in range(2, i):
        if i % j != 0:
            b += 1
            if b == i - 2:
                a.append(i)
m = 0
for i in range(6, 99):
    if i % 2 == 0:
        for j in range(2, i):
            if j in a:
                if i - j in a:
                    m += 1
                    if m == 5:
                        print(f'{i}={j}+{i - j}')
                        m = 0
                    else:
                        print(f'{i}={j}+{i - j}', end=' ')
                    break

第1行: 创建列表a用于存放素数

第2行: 使用for循环遍历3-100的整数,由于只需计算99以内的偶数,所以最大值选择了100,用以判断以及存放100以内的所有素数

第3-7行: 计算是否从2到数本身都不是该数的因子,若是,你们该数就是素数

第8行: 将判断结果是素数的数加入到列表a中

第9行: m=0用于记录每行输出的个数

第10行: 遍历6-99中的所有整数

第11行: 判断整数是否是偶数

第12-14行: for循环遍历小于i的整数,判断该数以及该数与i的差是否都在a中(都在列表a中代表他们都是素数)

第15行: 若满足上述条件,则给m值加一用以判断一行输出了几个

第16-18行: 如果m等于5,则正常输出便可(正常输出会自动换行),并将m重新等于0

第19-20行: 如果m不等于5,则输出并以空格为结尾,这样下次输出就会和本次在同一行了

第21行: 输出完毕后结束循环

print()函数

print() 方法用于打印输出,最常见的一个函数。

语法:print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)这里主要介绍end

参数说明:end -- 用来设定以什么结尾。默认值是换行符 \n,我们可以换成其他字符串。

代码运行结果为:

网络异常,图片无法展示
|

即使是一个小数字,如2566,也有37对这样的质数。它们是:

17+2549, 23+2543, 89+2477, 107+2459, 149+2417, 167+2399, 173+2393, 227+2339, 233+2333, 257+2309, 269+2297, 293+2273, 353+2213, 359+2207, 467+2099, 479+2087, 503+2063, 563+2003, 569+1997, 587+1979, 593+1973, 617+1949, 653+1913, 659+1907, 677+1889, 719+1847, 743+1823, 857+1709, 929+1637, 947+1619, 953+1613, 983+1583, 1013+1553, 1193+1373, 1259+1307, 1277+1289, 1283+1283。

从哥德巴赫分区中直观地看到所有偶数是由两个素数组成的。如下图所示,从2到47的质数可以组成最大94的偶数。

网络异常,图片无法展示
|
网络异常,图片无法展示
|

相关文章
|
数据采集 监控 Oracle
ERP系统的实施与变更管理:确保成功的数字化转型
【7月更文挑战第29天】 ERP系统的实施与变更管理:确保成功的数字化转型
696 0
|
9月前
五、ArkTS 常用组件-文本显示 (Text / Span)
本文档介绍了ArkTS中的文本显示组件(Text/Span),包括其基本概念、参数设置、常用属性(如字体大小、粗细、颜色、对齐方式)、最大行数及超长处理方法,以及子组件Span的使用方法。Text组件支持多种参数类型,包括字符串、资源引用等,并提供了丰富的属性设置选项以满足不同的文本显示需求。Span组件则主要用于在Text组件内部实现更精细的文本格式化,如设置不同的字体颜色、大小、装饰线等,同时支持点击事件的添加。
672 2
|
存储 监控 算法
深入探究Java线程池:提升并发性能的利器
在当今高度并发的应用开发中,Java线程池作为一种广泛应用的并发编程技术,提供了一种优雅且高效的线程管理方案。本文深入探究Java线程池的相关技术,涵盖其核心概念、优势、常见类型(如FixedThreadPool、CachedThreadPool、SingleThreadExecutor、ScheduledThreadPool、ForkJoinPool及WorkStealingPool)、核心参数配置、异常处理与监控方法,以及性能调优的最佳实践,帮助读者更好地理解和应用线程池,从而提升并发性能。
159 2
|
存储 传感器
Landsat遥感影像数据的批量下载:USGS
本文介绍在USGS网站批量下载Landsat系列遥感影像的方法~
1063 1
Landsat遥感影像数据的批量下载:USGS
|
测试技术 持续交付 API
Python的UI自动化测试
【4月更文挑战第17天】Python UI自动化测试涉及Selenium(Web)、Appium(移动应用)和PyQt(桌面应用)等框架。基本步骤包括确定测试目标、选择合适框架、安装配置、编写测试脚本、运行调试以及集成到CI/CD流程。注意自动化测试不能完全取代人工测试,应根据需求平衡使用。
289 1
|
缓存 Java API
Android 应用中基于 Retrofit 的网络请求优化实践
【4月更文挑战第5天】 在移动开发领域,网络通信是实现数据交换与服务集成的关键环节。针对安卓平台,Retrofit 作为一种流行且强大的HTTP客户端库,提供了简洁高效的网络请求解决方案。本文将深入探讨在 Android 应用程序中使用 Retrofit 进行网络请求时的性能优化策略,涵盖异步处理、请求重试机制、线程池管理以及缓存策略等方面。通过这些优化手段,开发者可以显著提升应用的响应速度和用户体验,同时确保数据传输的可靠性和效率。
419 1
|
存储 缓存 前端开发
【React】Hooks面试题集锦
本文集合一些React的Hooks面试题,方便读者以后面试查漏补缺。作者给出自认为可以让面试官满意的简易答案,如果想要了解更深刻,可以点击链接查看对应的详细博文。在此对链接中的博文作者非常感谢🙏。
493 1
|
传感器 算法 vr&ar
Python3 OpenCV4 计算机视觉学习手册:6~11(3)
Python3 OpenCV4 计算机视觉学习手册:6~11(3)
457 0
|
机器学习/深度学习 存储 运维
对抗升级|图数据库在金融风控中的 5 大典型应用
本文介绍了图数据库在实时风控中的几大经典场景和优势。
对抗升级|图数据库在金融风控中的 5 大典型应用
|
芯片 内存技术
STM32bug【 KEILMDK中出现Error: Flash Download failed - “Cortex-M3“】
STM32bug【 KEILMDK中出现Error: Flash Download failed - “Cortex-M3“】
1853 0