Skip to content

Instantly share code, notes, and snippets.

@acwoss
Created September 26, 2018 13:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save acwoss/11a23bd1336f643d5abc0210170a00fd to your computer and use it in GitHub Desktop.
Save acwoss/11a23bd1336f643d5abc0210170a00fd to your computer and use it in GitHub Desktop.
GlumStunningRouter created by acwoss - https://repl.it/@acwoss/GlumStunningRouter
import math, time
def sieve_of_eratosthene(N):
# Cria-se uma lista referente a todos os inteiros entre 0 e N:
A = [True] * (N+1)
# Define os números 0 e 1 como não primos:
A[0] = A[1] = False
# Percorra a lista até encontrar o primeiro número primo:
for value, prime in enumerate(A):
# O número é primo?
if prime:
# Retorna o número primo:
yield value
# Remova da lista todos os múltiplos do número enontrado:
for i in range(value**2, N+1, value):
A[i] = False
start = time.time()
# Percorre a lista de números primos menores que N:
for prime in sieve_of_eratosthene(500):
# Calcula o valor de n que define o Pn:
n = math.log2(prime+1)
# Verifica se n é inteiro, sendo um primo de Mersenne:
is_mersenne = n.is_integer()
# Se for um primo de Mersenne, calcula o número perfeito:
if is_mersenne:
print(2**(n-1) * prime)
print(f'Tempo de execução: {time.time() - start}s')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment