コードのタイムアウトエラーの修正方法について
コーディングテストの練習サイトCodilityのCountSemiprimesという問題を解いています。
CountSemiprimesについて日本語で書かれた記事
書いたコードを実行したところ、以下のエラーが出たため、出力の正しさを確認することができていません。
どのように修正するべきでしょうか。
Compilation successful.
Example test: (26, [1, 4, 16], [26, 10, 20])
TIMEOUT ERROR (running time: >5.00 sec., time limit: 5.00 sec.)
Detected some errors.
書いたコード
import itertools
import math
def solution(N, P, Q):
#素数の配列を作成
all = []
nonprime = []
for i in range (2, round(N/2)+1):
all.append(i)
#素数かどうか
for m in range(2, int(math.sqrt(i))):
if i % m == 0:
nonprime.append(i)
prime = set(all) - set(nonprime)
#semiprimeの配列を作成
semiprime = []
#全ての2つの組み合わせを作成し、かけ算をしてN以下のものを配列に追加
possible = list(itertools.combinations(prime,2))
for j in range (len(possible)):
pairs = possible[j]
num = pairs[0] * pairs[1]
if num <= N:
semiprime.append(num)
#P[]とQ[]の配列の範囲にあるsemiprimeの数を数える
result = []
for l in range(len(P)):
count = 0
for k in range(len(semiprime)):
while semiprime[k] >= P[l] and semiprime[k] <= Q[l]:
count += 1
result.append(count)
return result