python задача из егэ

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [2422000; 2422080], простые числа. Выведите все найденные простые числа в порядке возрастания, слева от каждого числа выведите его номер по порядку.

мой способ дает бесконечное выполнение программы

for x in range(2422000, 2422080):
    a = []
    for n in range(1,x):
        if x%n==0 and (x==n or n==1):
            a.append(n)
            
           
    print(a)

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

Автор решения: артем бондаренко

Под словами "номер по порядку" имеется в виду номер в списке (2422000, 2422080), или номер числа в списке простых чисел? Если первый вариант, то решение такое:

for i in range(2422000, 2422081):
    for j in range(2, i // 2):
        if i % j == 0: break
    else: print(i - 2421999, i)
→ Ссылка
Автор решения: Kers

По идее как то так

a = []
for x in range(2422000, 2422080):
    d = 2
    while x % d != 0:
        d += 1
    if d == x:
        a.append(x)
print(a)
→ Ссылка
Автор решения: S. Nick

Попробуйте так:

import math
 
def is_prime(i):
    m = min(i, int(math.sqrt(b)))
    l = range(2, m)
    r = map(lambda x: i % x == 0, l)
    return not any(r)
 
a = 2422000
b = 2422080
ls = range(a, b)
_list = list(filter(is_prime, ls))

print(*[ f'{i+1}: {v}' for i, v in enumerate(_list)], sep='\n')
→ Ссылка
Автор решения: PoMaXa

Попробуйте через списковую сборку, в первом списке поставьте нужный интервал в range(2, 1001)..., числа до 1000 поставил для примера, вот:

print([x for x in range(2, 1001) if not [n for n in range(2, x) if not x % n]])

или

print([x for x in range(2, 1001) if all(x % t for t in range(2, int(math.sqrt(x))+1))])
→ Ссылка
Автор решения: Егор
for i in  range(2422000, 2422081):
deli=[]
for a in range(2,i+1):
    if i%a==0:
        deli.append(a)
        if len(deli)>1:
            break
if len(deli)==1:
    print(deli)
 
→ Ссылка