Python 3.x 双素数Python程序

Python 3.x 双素数Python程序,python-3.x,Python 3.x,我需要编写一个Python程序来确定给定的整数输入是否为双素数。如果输入数字为双素数,则程序必须输出true。否则,它必须输出false 请有人指导我如何用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_prim

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

请有人指导我如何用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")

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

  • is_twin_prime函数没有假返回
  • is_素数函数总是以2开头,并迭代检查素数,这是非常低效的
  • 为了提供答案,我从以下关于twin_素数的因素开始:

    • 两个数字都必须是素数
    • abs(n-p)==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)
    
    导入itertools
    def erat2():
    D={}
    收益率2
    对于itertools.islice中的q(itertools.count(3),0,None,2):
    p=D.pop(q,无)
    如果p为无:
    D[q*q]=q
    产量q
    其他:
    x=p+q
    当x是否在D中时(x&1):
    x+=p
    D[x]=p
    def生成时间(给定编号):
    """
    
    返回素数。请共享您迄今为止编写的代码,并指出不工作的部分和/或您正在发生的错误。您好@Green斗篷Guy。感谢您的回复。我已编辑了我的帖子,以包含我迄今为止编写的代码。对于由此带来的不便,我深表歉意。您想知道N和p是否为双素数吗相互之间?非常感谢您的帮助!!!如果答案有帮助,请接受答案。