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)
相关推荐
牧天白衣.5 分钟前
力扣215.数组中的第K个最大元素
算法·leetcode
cxr82811 分钟前
控制理论基础
人工智能·算法
平平淡淡才是true24 分钟前
偏序关系、哈斯图、最长链长度、最长链条数
算法
小钊(求职中)29 分钟前
算法知识、常用方法总结
java·算法·排序算法·力扣
paeamecium34 分钟前
【PAT甲级真题】- Talent and Virtue (25)
数据结构·c++·算法·pat
Mr_Xuhhh40 分钟前
蓝桥杯复习清单真题(C++版本)
c++·算法·蓝桥杯
tankeven41 分钟前
HJ163 时津风的资源收集
c++·算法
Boop_wu1 小时前
[Java 算法] 动态规划(4)
数据结构·算法·leetcode
旖-旎1 小时前
分治(计算右侧小于当前元素的个数)(7)
c++·学习·算法·leetcode·排序算法·归并排序
cxr8281 小时前
细胞球运动追踪的卡尔曼滤波与力场插值算法 —— 活体内微米级颗粒实时定位与轨迹预测系统
算法