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