如何编写一个无争议的函数rong_prime,并且应返回q = 2 ^ p-1不是素数的第一个素数p

问题描述 投票:-3回答:1

500年前,人们相信所有形式为q = 2 ^ p的数字q-如果p为质数,则1为质数。

写一个不带参数的函数rong_prime。它应该返回q = 2 ^ p-1的第一个素数p不是素数。

提示:此数字应在10到15之间。

我想出的代码如下,但不起作用

def isprime(n):

  if n < 2:

    return False

  elif n == 2:

    return True

  else:

    if n % 2 == 0:

      return False

    for i in range(3,n,2):
      if n % i == 0:
        return False
    return True

def wrong_prime():

  for i in range(1,):

    q = 2**i-1
    if isprime(i) and isprime(q) == False:
        print(q)

输入错误函数时没有输出

任何人都可以帮助产生工作功能吗?

python primes
1个回答
2
投票

range(1,)range(0, 1),即您仅测试0。如果您想要开放式范围,可以使用例如具有额外计数变量的while循环。另请注意,您应该打印p,而不是q

def wrong_prime():
  i = 1
  while True:    # fix loop
    q = 2**i-1
    if isprime(i) and isprime(q) == False:
        print(i) # return p, not q
        break    # stop after first
    i += 1       # remember to increment manually

或与next一起使用itertools.count

import itertools
def wrong_prime():
    print(next(p for p in itertools.count(1) if isprime(p) and not isprime(2**p-1)))

((当然,给出“提示”,您也可以只使用range(10, 16)

© www.soinside.com 2019 - 2024. All rights reserved.