import time

def is_prime(number):
    i = 3
    while i**2 <= number:
        if number % i == 0:
            return False
        i += 2
    return True

def lucas_lehmer(p):
    s = 4
    M = 2**p - 1

    for _ in range(p - 2):
        s = ((s * s) - 2) % M
    return s == 0

def mersenne_primes():
    p = 3
    while True:
        if is_prime(p) and lucas_lehmer(p):
            yield (p, 2**p - 1)
        p += 2

start = time.time()
numbers = mersenne_primes()

for _ in range(15):
    p, mersenne = next(numbers)
    perfect = 2**(p-1) * mersenne
    print(perfect)

print('Executado em ' + str(time.time() - start) + 's')