Как убрать повторение в проверке цифр?
У меня есть код, это поиск простых чисел в диапазоне с помощью решета эратосфена. Но когда я прохожусь циклом, у меня происходит повторение.
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]