本文主要是介绍P1579 哥德巴赫猜想(升级版)Python 埃拉托斯特尼筛法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
哥德巴赫猜想(升级版)
题目背景
1742 年 6 月 7 日,哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于 9 9 9 的奇数都可以表示成 3 3 3 个质数之和。质数是指除了 1 1 1 和本身之外没有其他约数的数,如 2 2 2 和 11 11 11 都是质数,而 6 6 6 不是质数,因为 6 6 6 除了约数 1 1 1 和 6 6 6 之外还有约数 2 2 2 和 3 3 3。需要特别说明的是 1 1 1 不是质数。
这就是哥德巴赫猜想。欧拉在回信中说,他相信这个猜想是正确的,但他不能证明。
从此,这道数学难题引起了几乎所有数学家的注意。哥德巴赫猜想由此成为数学皇冠上一颗可望不可及的“明珠”。
题目描述
现在请你编一个程序验证哥德巴赫猜想。
先给出一个奇数 n n n,要求输出 3 3 3 个质数,这 3 3 3 个质数之和等于输入的奇数。
输入格式
仅有一行,包含一个正奇数 n n n,其中 9 < n < 20000 9 < n < 20000 9<n<20000。
输出格式
仅有一行,输出 3 3 3 个质数,这 3 3 3 个质数之和等于输入的奇数。相邻两个质数之间用一个空格隔开,最后一个质数后面没有空格。如果表示方法不唯一,请输出第一个质数最小的方案,如果第一个质数最小的方案不唯一,请输出第一个质数最小的同时,第二个质数最小的方案。
样例 #1
样例输入 #1
2009
样例输出 #1
3 3 2003
直接判断素数的方法是会超时的。
使用埃拉托斯特尼筛法,把素数都选出来,再加和
n = int(input())def erato(n):prime = [True for i in range(n+1)]p = 2while p**2<=n:if prime[p] == True:for i in range(p**2,n+1,p):prime[i] = Falsep+=1s = []for i in range(2,n+1):if prime[i]:s.append(i)return s
s = erato(n)
temp = 0
for i in s:for j in s:for k in s:if i+j+k==n:a,b,c = i,j,ktemp = 1breakif temp == 1:breakif temp == 1:break
print(a,b)
这篇关于P1579 哥德巴赫猜想(升级版)Python 埃拉托斯特尼筛法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!