描述:任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对。
数据范围:输入的数据满足 4 \le n \le 1000 \4≤n≤1000
输入描述:输入一个大于2的偶数
输出描述:从小到大输出两个素数
示例1
输入:20
输出:
7
13
示例2
输入:4
输出:
2
2
# 1/input,str,num代入函数;
# 2/遍历num从1到n-1,每个值除以比自己小的所有数,只能被1和自身求余数=0.则为素数;
# 3/对所有素数排序后,while left right判断,左右相加等于20的取出;
# 4/配对的素数,相减得到差值,取差值最小的后从小到大依次打印;
def exam(num):
num = num
ss = []
if num == 4:
print(2)
print(2)
else:
for i in range(1,num):
cnt = 0
temp = []
for j in range(1,i):
if i%j==0:
# print(i%j)
cnt += 1
if cnt == 1:
ss.append(i)
cnt = 0
temp = []
# print(sorted(ss))
# [2, 3, 5, 7, 11, 13, 17, 19, 23]
ss = sorted(ss)
lis = []
for l in range(len(ss)):
for r in range(len(ss)):
if ss[l] + ss[r] == num:
lis.append((ss[l],ss[r]))
# print(lis)
# 24:
# [(5, 19), (7, 17), (11, 13), (13, 11), (17, 7), (19, 5)]
# 118:
# [(5, 113), (11, 107), (17, 101), (29, 89), (47, 71), (59, 59), (71, 47), (89, 29), (101, 17), (107, 11), (113, 5)]
minlis = []
for i in lis:
minlis.append(i[0] - i[1])
# print(minlis)
# 24:
# [-14, -10, -2, 2, 10, 14]
# 118:
# [-108, -96, -84, -60, -24, 0, 24, 60, 84, 96, 108]
res = lis[max([i for i in range(len(minlis)) if minlis[i]<=0])]
# 0值则为最小值,需加上等于号
# print(res)
# 24:
# (11, 13)
# 118:
# (59, 59)
for i in res:
print(i)
# 24: 11 13
# 118:59 59
num = int(input().strip())
# 24
exam(num=num)