input: def sieve_of_eratosthenes(start: int, end: int) -> list:
      """
      Generate a list of prime numbers between the given start and end numbers using the Sieve of Eratosthenes algorithm.
      
      >>> sieve_of_eratosthenes(1, 20)
      [2, 3, 5, 7, 11, 13, 17, 19]
      """
output:     if start < 2:
          start = 2
      primes = []
      is_prime = [True] * (end + 1)
      for num in range(2, int(end**0.5) + 1):
          if is_prime[num]:
              for multiple in range(num*num, end + 1, num):
                  is_prime[multiple] = False
      for num in range(start, end + 1):
          if is_prime[num]:
              primes.append(num)
      return primes