Python の宿題ここで答えます Part 1

このエントリーをはてなブックマークに追加
878デフォルトの名無しさん
#エラトステネスの篩
#(コードは煩雑そうに見えるが、速度が圧倒的に速い。
# 大きな数までの素数表が必要な場合に必要な方法。)
a = range(10000)
a[1] = 0 # 1 は素数ではない
for p in a:
    if not p:
        continue
    elif p > 100: # 100 = sqrt(10000)
        break
    else:
        for multi in xrange(p+p, 10000, p):
            a[multi] = 0

# この時点で、aは、素数p番目にはpが、それ以外には0が入ったリストになっている。
a = [x for x in a if x]
for x in a: print x