エラトステネスの篩を応用して書いてみた。
import sys
import itertools
def primes():
p = []
p.append(2)
yield 2
p.append(3)
yield 3
for n in itertools.count(6, 6):
n1 = n - 1
for x in p:
if n1 % x == 0:
break
else:
p.append(n1)
yield n1
n2 = n + 1
for y in p:
if n2 % y == 0:
break
else:
p.append(n2)
yield n2
n = int(sys.argv[1])
for p in primes():
if p < n:
print p
else:
break
^o^ > python primes3.py 100 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
ここでは100未満の素数を出力している。さすがに primes3.py 1000000 とかやると遅い。