数据结构与算法练习-哥德巴赫猜想(查找)

python数据结构与算法练习-哥德巴赫猜想

哥德巴赫猜想

链接: link.
歌德巴赫猜想,是指对于每一个大于 4 的偶数n ,都能表示成两个质数之和。

现在,你需要写程序验证这一猜想。对于n ,找出质数a和b, 满足a+b=n, a<=b,且 a * b 最大。
例如n=8 ,满足条件的a和b分别为 3 和 5;

输入格式
每行一个偶数n(4<n<=20000)

输出格式
对应于每个输入的偶数,输出a 、一个空格、b、一个换行符

样例

#input
8
10
1000
#output
3 5
5 5
491 509

思路

  1. 判定一个数是否为质数,要用到math模块里的sqrt()-求开方根,对于给定的数n,如果i在2到(sqrt(n)+1)范围内有n % i == 0,那即是有除1和n本身以外别的因子,返回False。这里限定范围是避免重复。
  2. 对于l = m+n,m、n的乘积在二者最靠近l/2时最大,所以循环找乘积最大值时,可以从l/2到0逆序查找,如果出现m,n都为素数,则二者必然是满足条件的值。

python实现

import math
# 判断一个数是不是质数

def isPrimes(n):
    if n == 1:
        return True
    for i in range(2,int(math.sqrt(n)+1)):
        #从2开始判断是否有别的因子 有一个就为False
        if n % i == 0:
            return False
    return True
    
def gedebahe(num):
    mid = num // 2
    col = []
    for i in range(mid,0,-1):
        if isPrimes(i) and isPrimes(num-i):
            col.append((i,num - i))
            return col[-1]
while True:
    try:
        num = int(input())
        print(list(gedebahe(num))[0],list(gedebahe(num))[1],end='\n')
    except:
        break

仅记录刷题过程以及需要注意的知识点,方便自己复习。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值