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

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

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

一.枚举暴力求解 将两个数都循环确认一遍

时间复杂度O(n2)

空间复杂度O(n)

import copy
while True:
    try:
        n = int(input())
        s_i=[]
        for i in range(2,int(n/2)+1):
            for j in range(2,i):
                if i%j ==0:
                    break
            else:
                s_i.append(i)
        s_j = copy.deepcopy(s_i)
        for i in s_i:
            for j in range(2,n-i):
                if (n-i)%j==0:
                    s_j.remove(i)
                    break
        t=max(s_j)
        print(t)
        print(n-t)

    except:
        break

二.重新求素数+中心向两边扩散的方法:

如何判断一个数是不是素数: 任意一个非素数 x=p1*p2, p1<=sqrt(x),p2>=sqrt(x)

所以我们只需要判断在sqrt(x)范围内,p1是否存在

def isPrime(x):
	if x<=3:
    	return x>1
	for i in range(2, Math.sqrt(x)+1):
    	if x%i ==0:
        	return false
	else:
    	return true

因为 left, right 以数字中心值开始,往两边进行判断。要找到差值最小的,那么最近的找到和相等的即可:

def isPrime(num)://定义一个素数判断函数
    for i in range(2,int(pow(num,0.5))+1):
        if num%i==0:
            return False
        else:
            pass
    return True

def solution(left, right):
    while left>=0 and right<=n-1:
        if not isPrime(left) or not isPrime(right):
            left-=1
            right+=1
        else:
            print(left)
            print(right)
            break

while True:
    try:
        n=int(input())
        solution(int(n/2), int(n/2))
        
    except:
        break

时间复杂度:O(nn\sqrt{n}) 空间复杂度:O(1)

全部评论

相关推荐

10-15 10:23
门头沟学院 Java
牛可乐的头像真牛:赶紧举报,这公司绝对是诈骗的,等你签约后工作一两个月后根据合同漏洞把你开除,并且要求你赔偿3w培训费,996是为了提前筛选心甘情愿签下合同容易受骗的群体,纯粹面向校招生精心设计的骗局
你见过哪些工贼行为
点赞 评论 收藏
分享
10-19 14:15
兰州大学 Java
黄花菜豆:咱俩bg很一致啊uu而且我也做过这个仿小红书,感觉有点太深了短期内不好驾驭啊怕被问穿
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

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