def prime_sieve(n):
    sieve = [True] * int(n//2)
    for i in range(3,int(n**0.5)+1,2):
        if sieve[i//2]:
            sieve[i*i//2::i] = [False] * (int((n-i*i-1)//(2*i))+1)
    return [2] + [2*i+1 for i in range(1,int(n//2)) if sieve[i]]
def prime_sieve(n):
    sieve = [True] * int(n//2)
    for i in range(3,int(n**0.5)+1,2):
        if sieve[i//2]:
            sieve[i*i//2::i] = [False] * (int((n-i*i-1)//(2*i))+1)
    return [2] + [2*i+1 for i in range(1,int(n//2)) if sieve[i]]