Szukałem algorytmu do generowania liczb pierwszych. Znalazłem następujący wykonał Robert William Hanks. Jest bardzo wydajny i lepszy niż inne algorytmy, ale nie mogę zrozumieć matematyki za nim.Wyjaśnienie generatora liczb pierwszych?
def primes(n):
""" Returns a list of primes < n """
lis = [True] * n
for i in range(3,int(n**0.5)+1,2):
if lis[i]:
lis[i*i::2*i]=[False]*int((n-i*i-1)/(2*i)+1)
return [2] + [i for i in range(3,n,2) if lis[i]]
Jaka jest relacja między tablicy True
s wartościami oraz ostatecznej liczby pierwsze tablicy?
Wygląda na to, że używa się Sito Eratostenesa. – ForceBru
Ten kod z [tej odpowiedzi] (http://stackoverflow.com/questions/2068372/fastest-way-to-list-all-primes-below-n-in-python/3035188#3035188) jest w zasadzie nieco zoptymalizowany Sito Eratostenesa. Zauważ, że jest to kod Pythona 2, potrzebuje kilku poprawek do użycia w Pythonie 3. FWIW, Mam wersję RWH Pythona 3 w [ta odpowiedź] (http://stackoverflow.com/a/38743446/4014959) . –
Przejdź przez to za pomocą 'n = 6', zanotuj (na papierze) wartość' lis' i 'i' podczas przechodzenia przez pętlę. –