Как получить определенную функцию от python до l oop, используя функцию возврата? - PullRequest
0 голосов
/ 05 марта 2020

Я написал python код для генерации списка всех простых чисел Мерсенна q для p, меньшего, чем n_max. Эта функция работает при использовании print, однако мне нужно использовать return, но это останавливает l oop и выводит только первое простое число mersenne 3.

def primes(n):
    i, p, ps, m = 0, 3, [2], n // 2
    sieve = [True] * m
    while p <= n:
        if sieve[i]:
            ps.append(p)
            for j in range((p*p-3)//2, m, p):
                sieve[j] = False
        i, p = i+1, p+2
    return ps

def lucas_lehmer(p):
    if p == 2: return True
    m, i, s = pow(2,p) - 1, 3, 4
    while i <= p:
        i, s = i+1, (pow(s,2) - 2) % m
    return s == 0

def mersenne_prime(n_max):
    L1 = []
    for p in primes(n_max):
        if lucas_lehmer(p):
            q=(2**p)-1
            L1.append(q)
            return L1

Может кто-нибудь дать решение так, что код возвращает все простые числа Мерсенна, для которых р в q=2**p-1 меньше, чем n_max?

1 Ответ

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

Вам нужно инициализировать список a для хранения всех простых чисел. Затем добавьте к нему q.

def mersenne_prime(n_max):
    a=[]
    for p in primes(n_max):
        print(p)
        if lucas_lehmer2(p):
            q=(2**p)-1
            a.append(a)
    return a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...