Proje Euler'da bazı problemleri çözüyorum ve bir problemi çözmek için 2 milyon prim üretmeliydim. Eratosthenes Elemanı'nın uygulanmamın çok yavaş olduğu ortaya çıktı ama nedenini tam olarak bilmiyorum. Birisi bu uygulama ile ilgili büyük sorunları açıklayabilir. O kadar güzel olduğunu düşündüm ve sonra bunun tamamen korkunç anladım :(Ben çevrimiçi bunun başka uygulama buldum ve o kadar benim daha çok hızlıydıNeden Eratosthenes Elek çok yavaş?
def generatePrimes(upperBound):
numbers = range(2,upperBound+1)
primes = []
while numbers:
prime = numbers[0]
primes.append(prime)
numbers = filter((lambda x: x%prime),numbers)
return primes
DÜZENLEME:.. Tüm cevaplar için teşekkürler! Bunun sonucu olarak, bu sorun, her elemandan (sadece asal olarak işaretlenecek olanlar yerine) geçtiği ve her seferinde yeni bir liste oluşturduğu için sorun olan süzgeç olmasıdır. . ve bir filtreleme yuvarlak ve çok daha hızlı çalışır Yeni kod:
def generatePrimes(upperBound):
numbers = range(2,upperBound+1)
for i in xrange(len(numbers)):
if(numbers[i] != 0):
for j in xrange(i+numbers[i],len(numbers),numbers[i]):
numbers[j] = 0
primes = filter(lambda x: x,numbers)
return primes
bu python2 veya python3 nedir? –
Bir şey için, Eratosthenes Elek değil. Bu [deneme bölümü] (http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes#Trial_division). –
Her şeyden önce bir Sieve olduğundan şüpheleniyorum – therealprashant