Как убрать повторение в проверке цифр?

У меня есть код, это поиск простых чисел в диапазоне с помощью решета эратосфена. Но когда я прохожусь циклом, у меня происходит повторение.

def sieve(n):
    numbers = list(range(2, n+1))
    i = 0
    while i < len(numbers):
        k = numbers[i]
        numbers = [ x for x in numbers if x % k != 0 or x == k ]
        i += 1
        numbers = [ x for x in numbers if x % k != 0 or x == k]
    return numbers


def numbers(s, m):
    result = []
    for w in range(s, m+1):
        result.append(sieve(w))
    return result

s, m = map(int, input().split())
print(numbers(s, m))



Ввод: 2 5

Вывод: [[2], [2, 3], [2, 3], [2, 3, 5]]

Как сделать, чтобы вывод был просто 2 3 5


Ответы (1 шт):

Автор решения: Zhihar

немного странное решето

у меня вот такое получилось:

n = 100

# сформировать решето
values = list(range(n + 1))

# прочистить решето
for i in range(2, int(n**0.5) + 1):
    if values[i] != 0:
        j = 2 * i
        while j <= n:
            values[j] = 0
            j += i

# определить результат
res = [i for i in values if i > 1]

print(res)

даже покороче можно и покрасивше:

# сформировать решето
values = list(range(n + 1))

# прочистить решето
for i in range(2, int(n**0.5) + 1):
    for j in range(2 * i, n + 1, i):
        values[j] = 0

# определить результат
res = [i for i in values if i > 1]
→ Ссылка