首页 > 解决方案 > 双素数 Python 程序

问题描述

我需要编写一个 Python 程序来确定给定的整数输入是否是双素数。如果输入数字是双素数,则程序必须输出真。否则,它必须输出假。

请有人指导我如何用 Python 编写这个程序?

这是我到目前为止所做的。我被困在 is_twin_prime 函数部分。

def is_prime(x):
    for i in range(2, x):
        if x % i == 0:
            return False
    return True

def is_twin_prime(x):
    if is_prime(x) = True:


N = int(input()) 

for i in range(N):
    p = int(input())
    if is_twin_prime(p):
        print("true")
    else:
        print("false")

标签: python-3.x

解决方案


基于您试图确定 N 和 p 是否是彼此的孪生素数的假设,我发现您的代码存在以下几个问题:

  1. is_twin_prime 函数没有 False 返回
  2. is_prime 函数总是以 2 开头并迭代检查素数,这是非常低效的。

为了提供答案,我从以下关于 twin_primes 的事实开始:

  • 两个数都必须是素数
  • 绝对(np)== 2
  • n 和 p 必须在 [0, 2, 3, 5, 7, 8] 中都有一个个位
    为了使双素数的函数测试尽可能高效,我首先消除了不满足最后两种情况的任何数字,并且仅如有必要,我是否生成了一个素数列表。此外,在生成素数时,我只为最大的数字做了一次,因为一旦我有了列表或最大的两个数字都必须在列表中。

为了使搜索素数更有效,我使用了 itertools,尽管如果不使用它,效率会稍低。

import itertools
def erat2():
    D = { }
    yield 2
    for q in itertools.islice(itertools.count(3), 0, None, 2):
        p = D.pop(q, None)
        if p is None:
            D[q*q] = q
            yield q
        else:
            x = p + q
            while x in D or not (x&1):
                x += p
            D[x] = p

def generatePrimes(given_number):
    """
      Returns the prime number <= given_number using
      an adaptive sieve of estraothenes approach
    """ 
    return list(itertools.islice(erat2(), given_number))

def is_twinPrime(n, p):
    accepted_digits = [0, 2, 3, 5, 7, 8]
    if abs(n-p) != 2:
        return False
    elif n%10 not in accepted_digits and p%10 not in accepted_digits:
        return False
    else:
        primes = generatePrimes(max(n, p))
        if n in primes and p in primes:
            return True
    return False

N = int(input("Enter first number"))
P = int(input(Enter second number"))
print(istwinPrime(N, P)

推荐阅读