Skip to content

Commit 122a07c

Browse files
miss-islingtonrhettinger
authored andcommitted
Simplify sieve() recipe. Add edge case tests. (GH-96892)
(cherry picked from commit 78359b1) Co-authored-by: Raymond Hettinger <[email protected]>
1 parent 1c345fa commit 122a07c

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

Doc/library/itertools.rst

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -820,14 +820,14 @@ which incur interpreter overhead.
820820
pass
821821

822822
def sieve(n):
823-
"Primes less than n"
824-
# sieve(30) --> 2 3 5 7 11 13 17 19 23 29
825-
data = bytearray([1]) * n
826-
data[:2] = 0, 0
827-
limit = math.isqrt(n) + 1
828-
for p in compress(range(limit), data):
829-
data[p*p : n : p] = bytearray(len(range(p*p, n, p)))
830-
return iter_index(data, 1)
823+
"Primes less than n"
824+
# sieve(30) --> 2 3 5 7 11 13 17 19 23 29
825+
data = bytearray([1]) * n
826+
data[:2] = 0, 0
827+
limit = math.isqrt(n) + 1
828+
for p in compress(range(limit), data):
829+
data[p+p : n : p] = bytearray(len(range(p+p, n, p)))
830+
return compress(count(), data)
831831

832832
def flatten(list_of_lists):
833833
"Flatten one level of nesting"
@@ -1191,8 +1191,8 @@ which incur interpreter overhead.
11911191

11921192
>>> list(sieve(30))
11931193
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
1194-
>>> small_primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
1195-
>>> all(list(sieve(n)) == [p for p in small_primes if p < n] for n in range(101))
1194+
>>> small_primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59]
1195+
>>> all(list(sieve(n)) == [p for p in small_primes if p < n] for n in range(60))
11961196
True
11971197
>>> len(list(sieve(100)))
11981198
25

0 commit comments

Comments
 (0)