题解 | #查找组成一个偶数最接近的两个素数#
查找组成一个偶数最接近的两个素数
http://www.nowcoder.com/practice/f8538f9ae3f1484fb137789dec6eedb9
1、写一个能返回指定范围的所有素数的函数,在函数里将范围内所有的素数都放入列表中返回。 (类似于筛选法)
def Prime(n):
flag = [True] * (n+1)
lst = [2]
for i in range(3, n+1, 2):
if flag[i]:
lst.append(i)
for j in range(2*i, n+1, i):
flag[j] = False
return lst
2、遍历时判断自变量i是否满足i是素数并且(n-i)也是素数。是则加入ans列表中,以便下一步排序。
n = int(input())
primelist = Prime(n)
ans = []
for i in range(2, n):
if i in primelist and (n-i) in primelist:
ans.append([i, n-i]) #将结果放到ans列表中
3、将 i, n-i, |i-(n-i)| 放入temp中,以差值为关键字进行升序,取第一个元素即可。
temp = []
for x in ans:
k = abs(x[0] - x[1])
temp.append([x[0], x[1], k])
temp.sort(key = lambda x : x[2])
print(temp[0][0], temp[0][1])
完整代码:
def Prime(n):
flag = [True] * (n+1)
lst = [2]
for i in range(3, n+1, 2):
if flag[i]:
lst.append(i)
for j in range(2*i, n+1, i):
flag[j] = False
return lst
n = int(input())
primelist = Prime(n)
ans = []
for i in range(2, n):
if i in primelist and (n-i) in primelist:
ans.append([i, n-i])
temp = []
for x in ans:
k = abs(x[0] - x[1])
temp.append([x[0], x[1], k])
temp.sort(key = lambda x : x[2])
print(temp[0][0], temp[0][1])