如何降低Eratosthenes筛中的空间复杂度以在a和b之间生成素数?

如何降低Eratosthenes筛中的空间复杂度以在a和b之间生成素数?,第1张

如何降低Eratosthenes筛中的空间复杂度以在a和b之间生成素数

如果您有足够的空间将所有素数存储到sqrt(b),则可以使用额外的空间O(ba)来筛选a到b范围内的素数。

在Python中,它可能类似于:

def primesieve(ps,start,n):  """Sieve the interval [start,start+n) for primes.     Returns a list P of length n.       P[x]==1 if the number start+x is prime.       Relies on being given a list of primes in ps from 2 up to sqrt(start+n)."""  P=[1]*n  for p in ps:    for k in range((-start)%p,n,p):      if k+start<=p: continue      P[k]=0  return P

您只需筛分奇数就可以轻松占用一半的空间。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/4989372.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存