思路:先找出输入偶数以内的素数,再将素数相加判断是否等于该偶数。组成这个偶数最接近的两个素数,代码如下:
import math
def prime(m):
"""求一个数的质因子"""
lst = []
for i in range(2, int(math.sqrt(m))+1):
while m % i == 0:
lst.append(i)
m = m // i
if m >= 2:
lst.append(m)
return lst
while True:
try:
n = int(input())
prime_num = [] # 预定义列表,用于放置输入偶数以内的素数(质数)
temp = [] # 预定义列表,用于放置相加等于输入偶数的素数(质数)
for i in range(2, n+1): # 输入的偶数大于2
if len(prime(i)) == 1: # 质因子只有一个,即质因子只包含本身,即素数。此处获取到的素数列表必然为升序
prime_num.append(i)
for i in range(len(prime_num)): # 开始遍历循环输入偶数范围内的所有素数,获取相加等于输入偶数的素数
for j in range(i, len(prime_num)): # 注意j从i开始遍历,保证列表中当前元素不会和前边元素相加
if prime_num[i] + prime_num[j] == n:
temp.append(prime_num[i])
temp.append(prime_num[j])
# 获取到的相加等于输入偶数的素数列表,差值最小的两个素数必然位于列表末尾(因为素数列表prime_num是升序)
print(temp[-2])
print(temp[-1])
except:
break