Помогите, пожалуйста, понять, что конкретно делает этот код
def iprimes_upto(limit):
is_prime = [True] * limit
for n in range(2, limit):
if is_prime[n]:
yield n
for i in range(n*n, limit, n):
is_prime[i] = False
primes = list(iprimes_upto(2000000))
print(sum(primes))
Данный код в конце выдает сумму простых чисел до двух миллионов. Я просто не понимаю что происходит построчно именно в самой функции и как генерируется список.
Ответы (1 шт):
Автор решения: rew
→ Ссылка
Чтобы код правильно работал нужно исправить 6 строчку
def iprimes_upto(limit): # Реализация алгоритма решето эратосфена
is_prime = [True] * limit
for n in range(2, limit): # идем по всем числам из заданного промежутка
if is_prime[n]: # если число простое
yield n # возвращаем простое число но не заканчиваем функцию
for i in range(n*2, limit, n): # теперь все числа, которые могут получится умножением n на какоето число помечаем как непростые
is_prime[i] = False
print(sum(iprimes_upto(10)))