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

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

http://www.nowcoder.com/practice/f8538f9ae3f1484fb137789dec6eedb9

思路:先找出输入偶数以内的素数,再将素数相加判断是否等于该偶数。组成这个偶数最接近的两个素数,代码如下:

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

            
全部评论

相关推荐

11-22 16:49
已编辑
北京邮电大学 Java
美团 质效,测开 n*15.5
点赞 评论 收藏
分享
双非坐过牢:非佬,可以啊10.28笔试,11.06评估11.11,11.12两面,11.19oc➕offer
点赞 评论 收藏
分享
专心打鱼:互联网搬运工,贴子都要偷
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务