.

Traduzir

segunda-feira, 22 de abril de 2013

A soma de todos os numeros primos menor que 2000000

Semana passada eu conheci um site bem interessante, o http://projecteuler.net/, nesse site existem desafios matemáticos a serem resolvidos, mas que envolvem o uso de computador para solucionar esse problemas. Estou ainda bem no começo, resolvendo os primeiros problemas. Contudo existe um problema que achei bem interessante, que é o de determinar a soma dos números primos menores que 2000000. O que me impressionou na solução foi o desempenho do código. Meu programa escrito com cerca de 20 linhas de código forneceu a solução em menos de 8 segundos. Mas qual o segredo para essa agilidade? Está na resposta do problema 7 dessa mesma página. A dica é a seguinte.

Os números primos maiores que dois são ímpares.

Um números $n$ só pode ter um fator primo maior que $\sqrt{n}$

Todos os Primos maiores que 3 podem ser escritos na forma  6k+/-1.


Abaixo vai uma função em python para criar uma lista com $n$ números primos menors que $p$


[code]
from math import sqrt
def listprimos(n):
    P=[2, 3]
    k=[i for i in range(3,n) if i%2!=0 and i%3!=0]
    for p in k:
        r = round(sqrt(p), 0)
        f=5
        test = True
        while(f<=r):
            if(p%f == 0):
                test = False
                break
            elif(p%(f+2)==0):
                test = False
                break
            f+=6
        if(test == True):
            P.append(p)
    return P
[/code]


Nenhum comentário:

Postar um comentário