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)
相关推荐
浮生091913 分钟前
DHUOJ 基础 88 89 90
算法
v_for_van1 小时前
力扣刷题记录7(无算法背景,纯C语言)
c语言·算法·leetcode
先做个垃圾出来………1 小时前
3640. 三段式数组 II
数据结构·算法
tankeven2 小时前
HJ93 数组分组
c++·算法
Σίσυφος19002 小时前
LM 在 PnP(EPnP / P3P)的应用
算法
陈天伟教授2 小时前
人工智能应用- 人工智能交叉:01. 破解蛋白质结构之谜
人工智能·神经网络·算法·机器学习·推荐算法
LightYoungLee3 小时前
General-behavior interview tutorials
算法
I_LPL3 小时前
day34 代码随想录算法训练营 动态规划专题2
java·算法·动态规划·hot100·求职面试
We་ct3 小时前
LeetCode 105. 从前序与中序遍历序列构造二叉树:题解与思路解析
前端·算法·leetcode·链表·typescript
万象.4 小时前
redis集群算法,搭建,故障处理及扩容
redis·算法·哈希算法