input: Write a function to implement the Sieve of Eratosthenes algorithm and return a list of the first n prime numbers. Sieve of Eratosthenes is an efficient algorithm to find all primes smaller than or equal to a given limit. The function must take an integer n as input and return a list of the first n prime numbers. If the input is less than or equal to zero then return an empty list.
  assert sieve_of_eratosthenes(0)==[]
  assert sieve_of_eratosthenes(1)==[2]
  assert sieve_of_eratosthenes(5)==[2, 3, 5, 7, 11]
  assert sieve_of_eratosthenes(10)==[2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
  assert sieve_of_eratosthenes(-1)==[]
output: if n <= 0:
      return []
  
  limit = 2
  primes = []
  
  while len(primes) < n:
      is_prime = [True] * (limit + 1)
      is_prime[0] = is_prime[1] = False
  
      for i in range(2, int(limit**0.5) + 1):
          if is_prime[i]:
              for j in range(i*i, limit + 1, i):
                  is_prime[j] = False
  
      primes = [i for i in range(limit + 1) if is_prime[i]]
      limit *= 2
  
  return primes[:n]