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

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

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

            
全部评论

相关推荐

面了这么多场试,总有公司总喜欢压力面一个小时面试+手撕,哪里不会就点哪里,说了不会不会还继续追着问不尊重求职者,稍微有些细节记不清了,就开始怀疑项目真实性以及人格让求职者开摄像头但是自己不开,说话声音还贼小,pardon几次就开始不耐烦的不知道这个算不算,手撕的时候,面试官人跑了。。。最后快结束才来
一纸丿繁华丶:你换位思考一下,自己在职场被领导push麻了,身心俱疲,现在有个机会让你放松一下,体验一把上位者的感觉,还能看着那些高学历人才、未来自己的竞争者,抓耳挠腮、手足无措的样子,没给你当场笑出来就不错了,理解一下面试官吧。
点赞 评论 收藏
分享
06-08 22:25
门头沟学院 Java
从零开始的转码生活:这hr不会打开手机不分青红皂白给所有人群发这句话,过一会再给所有人再发一遍,这肯定会有重复的,不管,再过一会再发一遍
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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