長いリストを繰り返し処理する for ループ。リストを変更する反復を加速しようとしました(成功しませんでした)。コード:
from math import sqrt
def holeofStrainer():
isPrime = [False, False] + [True]*999999
for num in range(3, len(isPrime)):
if isPrime[num] == False:
continue
else:
for x in range(2, int(sqrt(num)) + 1):
if num % x == 0:
isPrime[num] = False
break
else:
isPrime[num] = True
for item in range (2, int(1000001/num) + 2):
ple = item * num
if ple < len(isPrime):
isPrime[ple] = False
return(isPrime)
print(holeofStrainer())
5 行目の目的は、不要な計算を省くことです。
14 ~ 17 行目で変更を加えます(エラトステネスのふるいに従い、素数の倍数の値を False に変更します)。これにより、5 行目の計算が増えることを回避します。
まとめ:
- ループ自体からループ反復リストを変更することは可能ですか?
- 答えが「はい」の場合、なぜ私のコードではうまくいかないのですか?