From 4f3056c84bc99cbe64c140c1ebe3f8a3dd394f0f Mon Sep 17 00:00:00 2001 From: "GASSER Thibaud (PRESTA EXT)" Date: Wed, 6 Mar 2024 16:06:02 +0100 Subject: [PATCH] stuff --- README.md | 2 ++ prime_streaming/stream.py | 33 ++++++++++++++++----------------- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index ceb21ef..6cf50f0 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Codewars solutions in python +![](https://www.codewars.com/users/thib8956/badges/small?theme=light) + ## Quickstart ```console diff --git a/prime_streaming/stream.py b/prime_streaming/stream.py index ca17af4..c69ff20 100644 --- a/prime_streaming/stream.py +++ b/prime_streaming/stream.py @@ -1,5 +1,6 @@ import numpy as np + def sieve_np(limit): if limit < 2: return [] @@ -17,6 +18,7 @@ def sieve_np(limit): primes = np.where(is_prime)[0] return primes.tolist() + def sieve(max_n): s = [True] * (max_n + 1) p = 2 @@ -25,34 +27,31 @@ def sieve(max_n): for i in range(p**2, max_n + 1, p): s[i] = False p += 1 - + primes = [p for p in range(2, max_n + 1) if s[p]] return primes -def sieve_of_eratosthenes(limit): - if limit < 2: - return [] - - # Create a boolean array "prime[0..limit]" and initialize all entries as True - prime = [True] * (limit + 1) - prime[0] = prime[1] = False # 0 and 1 are not prime numbers - +def sieve(max_n): + s = [True] * (max_n + 1) p = 2 - while p**2 <= limit: - if prime[p]: - # Update all multiples of p starting from p^2 - prime[p**2 : limit + 1 : p] = [False] * len(prime[p**2 : limit + 1 : p]) + while p**2 <= max_n: + if s[p]: + for i in range(p**2, max_n + 1, p): + s[i] = False p += 1 - # Create a list of prime numbers - primes = [p for p in range(2, limit + 1) if prime[p]] + primes = [p for p in range(2, max_n + 1) if s[p]] return primes +_primes = sieve(25_000_000) + + class Primes: - primes = sieve(25_000_000) - + global _primes + primes = _primes + @staticmethod def stream(): yield from Primes.primes