每日一练 2022.01.12 python 找出素数对

每日一练 2022.01.12 python 找出素数对

题目描述

找出素数对
任意输入一个大于10的偶数,编程找出所有和等于该偶数的素数对。一下程序实现了这一功能,请你填补空白处内容:

h=0
def a(h):
    x=0
    for j in range(2,h):
        if h%j==0:
            x=1
            break
    if x==0:
        return 1
n=int(input("输入任意大于10的偶数:"))
for i in range(n,n+1):
    h=0
    if i%2==0:
        for k in range(2,i):
            if(a(k)==1 and a(i-k)==1):
            ______________;

以上描述来自题目方便大家阅读和复制验证,以下给出题目原图大家可自行对比(应该没有错误(lll¬ω¬))
题目描述
由于上述图片不能显示全部代码,所以一下增加一张对代码的补充:
代码补充


问题描述

题目本身没什么问题,问题在于ta给出的正确答案(先上原图): 正确选线
在这里插入图片描述

题目中h的赋值语句和if else模块是同样的缩进:

        for k in range(2,i):
            if(a(k)==1 and a(i-k)==1):
                h=1
                if h==0:
                    print("%d can not"%i)
                    break
                else:
                    print("%d=%d+%d"%(i,k,i-k))
                    break

给定一个大于10的偶数100观察结果:
输入为100的结果
然而很明显结果只输出了第一个符合要求的素数数对,而没有输出全部素数对。


原因分析:

当寻找到第一个符合的素数对即满足了a(k)==1 and a(i-k)==1条件,h=1然后执行else中的语句,结尾的break直接退出循环不再寻找符合的素数数对。


解决方案:

        for k in range(2,i):
            if(a(k)==1 and a(i-k)==1):
                h=1
                print("%d=%d+%d"%(i,k,i-k))
        if h==0:
            print("%d can not"%i)
            break

改进后的代码在满足条件a(k)==1 and a(i-k)==1后直接打印数对print("%d=%d+%d"%(i,k,i-k))然后寻找下一个数对,待循环结束后再判断是否没有符合要求的数对。
运行结果:
输入为100时的结果
但是上述代码还有一个明显的问题是会重复打印,在这里对循环稍微优化一下:

        for k in range(2,int(i/2)):
            if(a(k)==1 and a(i-k)==1):
                h=1
                print("%d=%d+%d"%(i,k,i-k))
        if h==0:
            print("%d can not"%i)
            break

将循环上限改为目标的一半:int(i/2)即可解决上述问题,结果如下:
在这里插入图片描述
(第一次写博客有比较粗糙,而且还是代码菜狗,如果有大佬发现上述内容有任何问题欢迎评论区讨论)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hvp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值