我有几天在用SPOJ问题的Prime Generator算法挣扎。问题状态是在6秒钟内从数字m,n中打印至少100000个素数,其中n为< = 1000000000。我有这个实现在11.701067686080933秒内打印100000素数。是否有可能在Python中击败时间限制(6s)。 我觉得我错过了我的分段筛选功能,因为我只是实现了它,我怎么理解算法的工作,也许一个改变可以使它变得更好。Prime Generator(用于Spoj解决方案)
在这里可以获得一些帮助。
def sieveOfErosthen(m):
limit=m+1
prime=[True]*limit
for i in range(2,int(m**0.5)):
if prime[i]:
for x in range(i*i,limit,i):
prime[x]=False
return prime
def segmentedSieve(m,n):
limit= n+1
segment=[True]*limit
for j in range(2,int(n**0.5)):
if sieveOfErosthen(j):
for b in range(j*(m//j),limit,j):
if b >j:
segment[b]=False
for v in range(m,limit):
if segment[v]:
print(v)
return True
请格式化你的代码,它包含几个语法错误。 – Pythonist
请参阅我的分段筛[HERE](https://stackoverflow.com/a/10249801/448810)。 – user448810