将输入的偶数分为两部分a = b = 输入数/2 min_prime_number:先找0到a部分的素数 max_prime_number :后找b到输入数的素数
例如 输入数为 40 a = b = 20 即 min_prime_number 可以找到[2, 3, 7, 11, 13, 17, 19] max_prime_number只要实现40 减去 [2, 3, 7, 11, 13, 17, 19]对应的值为[(40-19)= 21 , 23, 27, 29, 33, 37, 38] 依次循环找到第一个素数,必定是差值最小
def min_prime_number(n): #
prime_min_list = []
for i in range(3, n + 1):
flag = 1
for j in range(2, i):
if i % j == 0:
flag = 0
break
if flag:
prime_min_list.append(i)
return prime_min_list # 假如 n = 20 prime_min_list = [2, 3, 7, 11, 13, 17, 19]
def max_prime_number(m):
# 这里 m = [19, 17, 13, 11, 7, 3, 2] 对应列表[(40-19)= 21 , 23, 27, 29, 33, 37, 38]
max_prime = 0
min_prime = 0
for i in m:
flag = 1
for j in range(2, (num - i)):
if (num - i) % j == 0: # 第一个数为21 不符合 第二数 23 符合 所有break 所有23 和 17就是两个素数而且差值最小
flag = 0
break
if flag:
max_prime = num - i
min_prime = i
break # 再跳出循环
return max_prime, min_prime
while True:
try:
num = int(input())
a = b = int(num // 2)
if a == 2:
print(a)
print(b)
else:
min_list = min_prime_number(a)
min_list.reverse()
a, b = max_prime_number(min_list)
print(b)
print(a)
except:
break