def sieve_linear(n):
is_prime = [True] * (n + 1)
primes = []
if n < 2:
return primes #
is_prime[0] = is_prime[1] = False
for i in range(2, n // 2 + 1):
if is_prime[i]:
primes.append(i)
j = 0
_____________________________________
is_prime[i * primes[j]] = False
if i % primes[j] == 0:
break
j += 1
for i in range(n // 2 + 1, n + 1):
if is_prime[i]:
primes.append(i)
return primes