蓝桥杯真题系列:哥德巴赫分解

博客内容讲述了如何寻找4到10000之间的偶数,将其拆分为两个素数之和,并记录每个偶数拆分出的最小素数,最终找出这些最小素数中的最大值。通过定义两个辅助函数,分别判断素数和偶数,然后遍历并筛选,得出最大值为173。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目比较难理解,这里我详细说一下:对于一个偶数(不小于4),都可以拆为两个素数之和,每一个偶数可能有超过一种拆法,在这个偶数所有的拆法中最小的素数记录下来,找到范围内的所有的偶数中每个偶数拆出的最小素数中最大的数。

题目比较绕,细心理解。

import math


def difine(n):
    if n <= 1:
        return False
    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            return False
    return True

def findou(n):
    if n % 2 == 0:
        return True
    else:
        return False

list1 = []
list2 = []
for i in range(4,10000):
    if findou(i) == True:
        for j in range(1,i):
            a = i - j
            if difine(j) == True and difine(a) == True:
                list1.append(min(j,a))
        list2.append(min(list1))
        list1 = []
print(max(list2))

定义两个工具函数,上方的difine用作判断一个数是不是素数,下面的findou用作查是否为偶数。创建两个list,list1用来记录一个偶数分解过程中拆出来的所有素数组合中小的那一个,list2用来记录一个偶数拆完后list1中留下的最小的素数。需要注意的是,每查完一个偶数需要把list1清空以方便记录下一个偶数。由于python的原因计算比较慢,需要几秒钟。最终答案为:

173

 

PS:补充一下判断素数是其中一个知识点,对于一个大于1的整数,如果从2到其平方根的整数都无法整除的话,其就是一个素数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值