【每周一坑】验证哥德巴赫猜想
哥德巴赫在 1742 年给欧拉的信中提出了以下猜想:任一大于 2 的整数都可写成三个质数之和。(因现今数学界已经不使用“1 也是质数”这个约定,原初猜想的现代陈述为:任一大于 5 的整数都可写成三个质数之和。)欧拉在回信中也提出另一等价版本,即任一大于 2 的偶数都可写成两个质数之和。今日常见的猜想陈述为欧拉的版本。
尽管对于大多数人来说,无法看懂哥德巴赫猜想及相关问题的证明。不过我们借助计算机,可以快速地判断一个数是否符合哥德巴赫猜想。(只需在判断质数的代码基础上加上两三行。)
所以本周的问题就是:
实现一段代码,输入一个大于 2 的偶数 k,输出两个质数 m、n,满足 m + n == k
。
示例:
>>> Goldbach(123456) 7 123449 >>> Goldbach(12345678) 31 12345647
期待各位同学提交解答。
提交代码可以使用 paste.ubuntu.com 或 codeshare.io 等代码分享网站,只需将代码复制上去保存,即可获得一个分享地址,非常方便。
往期问题可通过公众号菜单栏“课外辅导”栏目中进入查看。
【杨辉三角形】解答
针对上一期的杨辉三角形题目,我们首先来看如何生成杨辉三角列表,然后解决如何从杨辉三角列表中取值。
生成一个 M 行的杨辉三角列表
def yanghui(n): lst = []
for row in range(n):
if row < 2: n_row = [1 for i in range(row+1)]
else: last_row = lst[-1] n_row = [last_row[i]+last_row[i+1] for i in range(len(last_row)-1)] n_row = [1] + n_row + [1] lst.append(n_row)
return lst yh = yanghui(5)
for i in yh: print('{:^15}'.format(str(i)[1:-1]))
结果:
1 1, 1 1, 2, 1 1, 3, 3, 1 1, 4, 6, 4, 1
既然已经得到了杨辉三角列表的生成方法,获取其第 M 行左起第 N 个数就十分容易了。
def yanghui_2(n,k): lst = yanghui(n)[-1]
return lst[k] print(yanghui_2(5,3))
输出:4
上周 @FisherC、@严迪、@疯琴、@Kunz、@王任、@右边先森、@lisp 等同学提交了代码,其中 @Kunz、@王任 完成了附加题。如果还不能写出的同学可以从上一期的留言中寻找他们的代码参考。