写点什么

Python 应用之哥德巴赫猜想——偶数

作者:向阳逐梦
  • 2022 年 10 月 07 日
    四川
  • 本文字数:1661 字

    阅读完需:约 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 = 0for 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 的偶数。




发布于: 刚刚阅读数: 4
用户头像

向阳逐梦

关注

人生享受编程,编程造就人生! 2022.06.01 加入

InfoQ签约作者、阿里云“乘风者计划”签约博主

评论

发布
暂无评论
Python应用之哥德巴赫猜想——偶数_10月月更_向阳逐梦_InfoQ写作社区