def sieve_of_eratosthenes(limit):
# Create a boolean array "prime[0..limit]" and initialize
# all entries as true. A value in prime[i] will finally
# be false if i is Not a prime, else true.
prime = [True] * (limit + 1)
prime[0] = prime[1] = False # 0 and 1 are not prime numbers
for p in range(2, int(limit**0.5) + 1):
# If prime[p] is not changed, then it is a prime
if prime[p]:
# Update all multiples of p
for i in range(p**2, limit + 1, p):
prime[i] = False
# Return the list of prime numbers
return [i for i in range(2, limit + 1) if prime[i]]
# Example usage:
limit = 50
result = sieve_of_eratosthenes(limit)
print(f"Prime numbers up to {limit}: {result}")