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

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

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

            
全部评论

相关推荐

沉淀一会:1.同学你面试评价不错,概率很大,请耐心等待; 2.你的排名比较靠前,不要担心,耐心等待; 3.问题不大,正在审批,不要着急签其他公司,等等我们! 4.预计9月中下旬,安心过节; 5.下周会有结果,请耐心等待下; 6.可能国庆节前后,一有结果我马上通知你; 7.预计10月中旬,再坚持一下; 8.正在走流程,就这两天了; 9.同学,结果我也不知道,你如果查到了也告诉我一声; 10.同学你出线不明朗,建议签其他公司保底! 11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
冲芭芭拉鸭:你这图还挺新,偷了。
投递美团等公司10个岗位
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务