题解 | #查找组成一个偶数最接近的两个素数#

查找组成一个偶数最接近的两个素数

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])




全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务