https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
Algorytm szukania wszystkich liczb pierwszych nie większych od podanej liczby.
def sito(n): """Sito Eratostenesa - liczby pierwsze nie większe od n.""" L = [0] + n * [1] p = 2 q = p * p while q <= n: if L[p] == 1: # liczba pierwsza i = q while i <= n: # wyrzucam p*p, p*(p+1), p*(p+2),... L[i] = 0 i = i + p p = p + 1 q = p * p M = [] for i in range(1, n+1): if L[i] == 1: M.append(i) return M
# Wersja bardzie zwarta. def sito(n): # liczby pierwsze <= n """Sito Eratostenesa - liczby pierwsze nie większe od n.""" L = [0] + n * [1] for p in range(2, n): # wystarczy p do sqrt(n) q = p * p if q > n: break if L[p] == 1: # liczba pierwsza # wyrzucam p*p, p*(p+1), p*(p+2),... for i in range(q, n+1, p): L[i] = 0 return [i for i in range(1, n+1) if L[i]==1]