题目比较难理解,这里我详细说一下:对于一个偶数(不小于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到其平方根的整数都无法整除的话,其就是一个素数。