Bir Elek Eratosthenes yazdım - Sanırım - ama olabildiğince optimize edilmiş gibi değil. Çalışır ve N'ye kadar tüm primleri alır, ama umduğum kadar çabuk değil. Hala Python öğreniyorum - Java iki yıl gelen - bir şey özellikle Pythonic değilse o halde ben özür dilerim:Eratosthenes Elek Optimize Etmek
def sieve(self):
is_prime = [False, False, True, True] + [False, True] * ((self.lim - 4) // 2)
for i in range(3, self.lim, 2):
if i**2 > self.lim: break
if is_prime[i]:
for j in range(i * i, self.lim, i * 2):
is_prime[j] = False
return is_prime
Ben buna benzer diğer sorular baktım ama yapamam Bazı daha karmaşık optimizasyonların benim koduma nasıl uyduğunu anlamaya çalışıyorum. Baska öneri?
DÜZENLEME: İstediğim gibi, gördüğüm diğer optimizasyonlardan bazıları, sınırlamadan önce ilk döngü döngüsünün yinelemesini durdurarak, farklı sayılarla atlama yapmaktır - ki bu, tekerlek optimizasyonu mu?
DÜZENLEME 2: İşte Pádraic için, yöntem kullanmak istiyorum kod:
primes = sieve.sieve()
for i in range(0, len(primes)):
if primes[i]:
print("{:d} ".format(i), end = '')
print() # print a newline
Referans ettiğiniz diğer optimizasyonları açıklayan kısa bir snippet verebilir misiniz? – BlackVegetable
İkinci 'if i ** 2> self.lim: break' satırı gereksizdir. – jwodder
@BlackVegetable Question düzenlenmiş. – hfehlan