fork download
  1. import math, time
  2.  
  3. def sieve_of_eratosthene(N):
  4.  
  5. # Cria-se uma lista referente a todos os inteiros entre 0 e N:
  6. A = [True] * (N+1)
  7.  
  8. # Define os números 0 e 1 como não primos:
  9. A[0] = A[1] = False
  10.  
  11. # Percorra a lista até encontrar o primeiro número primo:
  12. for value, prime in enumerate(A):
  13.  
  14. # O número é primo?
  15. if prime:
  16.  
  17. # Retorna o número primo:
  18. yield value
  19.  
  20. # Remova da lista todos os múltiplos do número enontrado:
  21. for i in range(value**2, N+1, value):
  22. A[i] = False
  23.  
  24. start = time.time()
  25.  
  26. # Percorre a lista de números primos menores que N:
  27. for prime in sieve_of_eratosthene(500):
  28.  
  29. # Calcula o valor de n que define o Pn:
  30. n = math.log2(prime+1)
  31.  
  32. # Verifica se n é inteiro, sendo um primo de Mersenne:
  33. is_mersenne = n.is_integer()
  34.  
  35. # Se for um primo de Mersenne, calcula o número perfeito:
  36. if is_mersenne:
  37. print(2**(n-1) * prime)
  38.  
  39. print('Tempo de execução: ' + str(time.time() - start) + 's')
Success #stdin #stdout 0.02s 27728KB
stdin
Standard input is empty
stdout
6.0
28.0
496.0
8128.0
Tempo de execução: 0.007408857345581055s