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

蓝桥杯真题系列:哥德巴赫分解_第1张图片

题目比较难理解,这里我详细说一下:对于一个偶数(不小于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

蓝桥杯真题系列:哥德巴赫分解_第2张图片

 

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

你可能感兴趣的:(蓝桥杯真题,笔记,蓝桥杯,职场和发展)