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

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

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

            
全部评论

相关推荐

炫哥_:哥们项目描述里面vector和mysql之类的都要写吗,直接开头技术栈巴拉巴拉就行了,完全不是技术点啊
点赞 评论 收藏
分享
asdasdasdasdas:19岁,不容易啊可能升个本会好点,现在学历歧视太严重了
点赞 评论 收藏
分享
06-27 18:45
中山大学 Ruby
25届应届毕业生,来广州2个礼拜了,找不到工作,绝望了,太难过了…
应届想染班味:9爷找不到工作只能说明,太摆了或者太挑了。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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