-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprime.py
57 lines (44 loc) · 1.2 KB
/
prime.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
from math import sqrt
primes = [2]
for i in range(3,32000,2):
isprime = True
cap = sqrt(i)+1
for j in primes:
if (j >= cap):
break
if (i % j == 0):
isprime = False
break
if (isprime):
primes.append(i)
T = input()
output = ""
for t in range(T):
if (t > 0):
output += "\n"
M,N = raw_input().split(' ')
M = int(M)
N = int(N)
cap = sqrt(N)+1
if (M < 2):
M = 2
isprime = [True]*100001
for i in primes:
if (i >= cap):
break
if (i >= M):
start = i*2
else:
start = M + ((i - M % i)%i)
# The two below, obscure lines create a continuous
# block of false elements in order to set all
# elements correspnding to numbers divisible by i
# in isprime to be false
# In turns out that this runs substantially faster
# than setting the elements individually using loops
falseblock = [False] * len(isprime[start-M:N+1-M:i]);
isprime[start-M:N+1-M:i] = falseblock
for i in range(M,N+1):
if (isprime[i-M] == True):
output += str(i) + "\n"
print output[:-1]