From 1360ccbbc02efbaa41ed76c575cea6afd85aaf12 Mon Sep 17 00:00:00 2001 From: Tianyi Zheng Date: Thu, 29 Dec 2022 16:25:40 -0800 Subject: [PATCH 1/2] Change prime_sieve_eratosthenes.py to return list --- maths/prime_sieve_eratosthenes.py | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/maths/prime_sieve_eratosthenes.py b/maths/prime_sieve_eratosthenes.py index 3a3c55085218..0fc2cfda3147 100644 --- a/maths/prime_sieve_eratosthenes.py +++ b/maths/prime_sieve_eratosthenes.py @@ -1,10 +1,10 @@ """ Sieve of Eratosthenes -Input : n =10 +Input: n = 10 Output: 2 3 5 7 -Input : n = 20 +Input: n = 20 Output: 2 3 5 7 11 13 17 19 you can read in detail about this at @@ -12,14 +12,14 @@ """ -def prime_sieve_eratosthenes(num): +def prime_sieve_eratosthenes(num: int) -> list[int]: """ - print the prime numbers up to n + Print the prime numbers up to n >>> prime_sieve_eratosthenes(10) - 2,3,5,7, + [2, 3, 5, 7] >>> prime_sieve_eratosthenes(20) - 2,3,5,7,11,13,17,19, + [2, 3, 5, 7, 11, 13, 17, 19] """ primes = [True for i in range(num + 1)] @@ -31,9 +31,7 @@ def prime_sieve_eratosthenes(num): primes[i] = False p += 1 - for prime in range(2, num + 1): - if primes[prime]: - print(prime, end=",") + return [prime for prime in range(2, num + 1) if primes[prime]] if __name__ == "__main__": @@ -42,4 +40,4 @@ def prime_sieve_eratosthenes(num): doctest.testmod() num = int(input()) - prime_sieve_eratosthenes(num) + print(prime_sieve_eratosthenes(num)) From 66fa29cce80804a0aebb5938d31400bd4ac1e5e9 Mon Sep 17 00:00:00 2001 From: Tianyi Zheng Date: Thu, 29 Dec 2022 16:32:51 -0800 Subject: [PATCH 2/2] Add more doctests and input validation --- maths/prime_sieve_eratosthenes.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/maths/prime_sieve_eratosthenes.py b/maths/prime_sieve_eratosthenes.py index 0fc2cfda3147..32eef9165bba 100644 --- a/maths/prime_sieve_eratosthenes.py +++ b/maths/prime_sieve_eratosthenes.py @@ -20,11 +20,22 @@ def prime_sieve_eratosthenes(num: int) -> list[int]: [2, 3, 5, 7] >>> prime_sieve_eratosthenes(20) [2, 3, 5, 7, 11, 13, 17, 19] + >>> prime_sieve_eratosthenes(2) + [2] + >>> prime_sieve_eratosthenes(1) + [] + >>> prime_sieve_eratosthenes(-1) + Traceback (most recent call last): + ... + ValueError: Input must be a positive integer """ - primes = [True for i in range(num + 1)] - p = 2 + if num <= 0: + raise ValueError("Input must be a positive integer") + + primes = [True] * (num + 1) + p = 2 while p * p <= num: if primes[p]: for i in range(p * p, num + 1, p): @@ -38,6 +49,6 @@ def prime_sieve_eratosthenes(num: int) -> list[int]: import doctest doctest.testmod() - num = int(input()) - print(prime_sieve_eratosthenes(num)) + user_num = int(input("Enter a positive integer: ").strip()) + print(prime_sieve_eratosthenes(user_num))