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)
相关推荐
smj2302_796826528 小时前
解决leetcode第3943题递增后的数对数量
数据结构·python·算法·leetcode
炽烈小老头9 小时前
【每天学习一点算法 2026/05/25】矩阵中的最长递增路径
学习·算法·矩阵
叁散9 小时前
实验报告:5G 仿真环境与基本链路模拟
算法
从负无穷开始的三次元代码生活10 小时前
算法零碎灵感点分享
算法
染指111010 小时前
9.LangChain框架(实现RAG)
数据库·人工智能·算法·机器学习·ai·大模型
大数据三康10 小时前
在spyder进行的遗传算法练习
开发语言·python·算法
Gene_202210 小时前
轮式底盘的微分平坦
算法
吴佳浩11 小时前
现代多模态大模型的核心基础:Unified Self-Attention
人工智能·算法·llm
小小编程路12 小时前
C++ 常用逻辑运算符
开发语言·c++·算法
Hali_Botebie12 小时前
两种子词分词算法BPE (Byte-Pair Encoding) 和Unigram 区别
人工智能·算法