Как написать функцию error_prime, которая не принимает аргументов и должна возвращать первое простое число p, для которого q = 2 ^ p - 1 не простое - PullRequest
0 голосов
/ 05 марта 2020

500 лет a go считалось, что все числа q в форме q = 2 ^ p - 1 являются простыми, если p простое.

Напишите функцию error_prime, которая не принимает аргументов , Он должен вернуть первое простое число p, для которого q = 2 ^ p - 1 не простое число.

Подсказка: это число должно быть между 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)

При вводе неправильной_функции нет вывода

Может кто-нибудь помочь с созданием работающей функции?

1 Ответ

2 голосов
/ 05 марта 2020

range(1,) - это range(0, 1), т.е. вы тестируете только 0. Если вам нужен открытый диапазон, вы можете использовать, например, while l oop с дополнительной переменной подсчета.

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

или использовать next с itertools.count:

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

(Конечно, учитывая «подсказку», вы также можете просто использовать range(10, 16))

Также обратите внимание, что функция должна return значение p, тогда как ваша отпечатков q. Для тестирования позвоните по номеру print(wrong_prime()), чтобы увидеть значение.

...