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

直接判断素数的方法是会超时的。

使用埃拉托斯特尼筛法,把素数都选出来,再加和

python 复制代码
n = int(input())

def erato(n):
    prime = [True for i in range(n+1)]
    p = 2
    while p**2<=n:
        if prime[p] == True:
            for i in range(p**2,n+1,p):
                prime[i] = False
        p+=1
    s = []
    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,k
                temp = 1
                break
        if temp == 1:
            break
    if temp == 1:
        break
print(a,b)
相关推荐
QxQ么么4 分钟前
移远通信(桂林)26校招-助理AI算法工程师-面试纪录
人工智能·python·算法·面试
Mz12212 小时前
day05 移动零、盛水最多的容器、三数之和
数据结构·算法·leetcode
SoleMotive.2 小时前
如果用户反映页面跳转得非常慢,该如何排查
jvm·数据库·redis·算法·缓存
念越3 小时前
判断两棵二叉树是否相同(力扣)
算法·leetcode·入门
ghie90904 小时前
线性三角波连续调频毫米波雷达目标识别
人工智能·算法·计算机视觉
却话巴山夜雨时i4 小时前
74. 搜索二维矩阵【中等】
数据结构·算法·矩阵
sin_hielo4 小时前
leetcode 3512
数据结构·算法·leetcode
_F_y4 小时前
二分:二分查找、在排序数组中查找元素的第一个和最后一个位置、搜索插入位置、x 的平方根
c++·算法
Elias不吃糖4 小时前
LeetCode--130被围绕的区域
数据结构·c++·算法·leetcode·深度优先