Я пытаюсь решить проблему, упомянутую здесь: https://www.spoj.pl/problems/PRIME1/
Я также даю описание ниже.
Питер хочет сгенерировать несколько простых чисел для своей криптосистемы. Помоги ему! Ваша задача состоит в том, чтобы сгенерировать все простые числа между двумя заданными числами!
Вход
Ввод начинается с количества t тестов в одной строке (t‹=10). В каждой из следующих t строк через пробел записаны два числа m и n (1 ‹= m ‹= n ‹= 1000000000, n-m‹=100000).
Выход
Для каждого теста выведите все простые числа p такие, что m ‹= p ‹= n, по одному числу в строке, тесты разделены пустой строкой.`
Мой код, как показано ниже. Я думаю, что метод удаления из списка очень медленный.
import sys
import math
num = int(sys.stdin.readline());
indices = []
maxrange = 2
while(num > 0):
a,b = sys.stdin.readline().split(" ");
a = int(a)
b = int(b)
if(a < 2):
a = 2
indices.append((a,b))
if(b > maxrange):
maxrange= b
num = num - 1
val = int(math.sqrt(maxrange)+1)
val2 = int(math.sqrt(val)+1)
checks = range(2,val2)
for i in range(2,val2):
for j in checks:
if(i!= j and j%i == 0):
checks.remove(j)
primes = range(2,val)
for i in checks:
for j in primes:
if(i != j and j%i == 0):
primes.remove(j)
primes2 = range(2,maxrange)
for i in primes:
for j in primes2:
if(j != i and j%i == 0):
primes2.remove(j)
for (a,b) in indices:
for p in primes2:
if(a<= p and b >= p):
print p
if(p > b):
break
print
Я думаю, что удаление списка python происходит очень медленно. Мой код правильный, но у меня превышен лимит времени. может кто-нибудь помочь мне улучшить этот код.