Question:codility Lesson11 CountSemiprimes
My Answer:
from math import sqrt
def solution(N,P,Q):
sieve = [True] * (N + 1)
sieve[0] = False
sieve[1] = False
prime = []
i = 2
while i * i <= N:
if sieve[i] == True:
k = i * i
prime.append(i)
while (k <= N):
sieve[k] = False
k += i
i += 1
for ele in range(i,N + 1):
if sieve[ele] == True:
prime.append(ele)
primecnt = len(prime)
semiprimes = [0] * (N + 1)
for i in range(primecnt - 1):
for j in range(i,primecnt):
if prime[i] * prime[j] > N:
break
semiprimes[prime[i] * prime[j]] = 1
for i in range(1,N + 1):
semiprimes[i] += semiprimes[i - 1]
res = []
for i in range(len(P)):
res.append(semiprimes[Q[i]] - semiprimes[P[i] - 1])
return res