Python|每日一练|素数对|优化算法|素数|素数对:找出素数对

找出素数对

Tips:素数对

素数对是指两个相差为2的素数,例如5和7,17和19等。

一个正整数n内的所有素数对可以用下面的Python代码找到:

def prime_pairs(n):
    result = []
    for i in range(2, n+1):
        if is_prime(i) and is_prime(i-2):
            result.append((i-2, i))
    return result

def is_prime(num):
    if num < 2:
        return False
    for i in range(2, int(num**0.5)+1):
        if num % i == 0:
            return False
    return True

题目

任意输入一个大于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:

                               ________________;

解题思路:

。首先,判断输入是否为偶数,;其次,按顺序寻找小于该偶数的每个素数,并与该偶数相减,得到另外一个素数,打印输出。

A

输出:

100 can't

100 can't

100 can't

100 can't

100 can't

。。。。。。

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:
            h = 1
            #不存在时h=0
            if h == 1:
               print("%d can't" % i)
               #break
               continue
            else:
               print("%d=%d+%d" % (i, k, i - k))
               #break
               continue

B

当存在时输出正确,但对不存在时的判断逻辑有误,应break

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:
                     h = 1
                     if h == 0:
                        print("%d can't" % i)
                        #应为:break
                        continue
                     else:
                        print("%d=%d+%d" % (i, k, i - k))
                        continue

C  ,选项解答

h=1时的执行条件有误,break修改为continue

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:
                         h = 1
                         if h == 0:
                            print("%d can't" % i)
                            break
                         else:
                            print("%d=%d+%d" % (i, k, i - k))
                            continue

D

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:
                     h = 1
                     #不存在时h=0
                     if h == 1:
                        print("%d can't" % i)
                        break
                     else:
                        print("%d=%d+%d" % (i, k, i - k))
                        break

改进算法:

from math import sqrt
def a(n):
   if n <= 1:
      return False
   for i in range(2, int(sqrt(n) + 1)):
      if n % i == 0:
         return False
   return True
n = int(input("输入任意大于10的偶数:"))
if n % 2 == 1:
   print("%d not a even number." % n)
elif n % 2 == 0:
   for k in range(2, n):
      if a(k) == 1 and a(n - k) == 1:
                     print("%d=%d+%d" % (n, k, n - k))

PS:素数的判断方法(转载)

https://blog.csdn.net/weixin_53501217/article/details/111159621

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

打酱油的工程师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值