展开全部
import itertools
import time
N = 2000000
L = range(N)
def findnxt(s):
flag = 0
for n in itertools.ifilter(None, L[s+1:]):
return n
t0 = time.time()
n = 2
X = int(N ** .5)
while n < X:
for i, x in enumerate(L[::n][1:]):
if i==0: continue
L[x] = 0
n = findnxt(n)
t1 = time.time()
print "Process usage", t1-t0
l = filter(None, L)
print len(l)
#~2113 >python -u "baidu.py"
#~ Process usage 13.3068089485
#~ 148934
#~ >Exit code: 0 Time: 13.651
今天见5261到另一个代码4102,非常棒1653(sorry, 忘记了出处)#!/usr/bin/python
# encoding: utf-8
import itertools
import time
N = 2000000
def clear(aPrime,aList,maxNum):
for i in xrange(aPrime, maxNum, aPrime):
aList[i]=0
def allPrime(maxNum):
aList = range(0,maxNum)
prime = []
for i in xrange(2,len(aList)):
if aList[i] != 0:
prime.append(aList[i])
clear(aList[i],aList,maxNum)
return prime
t0 = time.time()
primelist = allPrime(N)
t1 = time.time()
print len(primelist ),
print '[%s .. %s]' %(
','.join(map(str,
primelist [:10])),
','.join(map(str,
primelist [-10:])),
)
print "Process usage", t1-t0
#~ >python -u "baidu.py"
#~ 148933 [2,3,5,7,11,13,17,19,23,29 .. 1999853,1999859,1999867,1999871,1999889,1999891,1999957,1999969,1999979,1999993]
#~ Process usage 1.31931495667
#~ >Exit code: 0 Time: 1.449