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