当前位置: 首页 > 面试题库 >

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

羿宏硕
2023-03-14
问题内容

在了解了一些SO帖子之后,我发现Eratosthenes的Sieve是生成质数的最佳和最快方法。

我想生成两个数字(例如a和)之间的质数b

AFAIK,在Sieve方法中,空间复杂度为O(b)。

PS:我写的是Big-O而不是Theta,因为我不知道是否可以减少空间需求。

我们可以降低《蛇神之筛》中的空间复杂度吗?


问题答案:

如果您有足够的空间将所有素数存储到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

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



 类似资料:
  • 在阅读了一些SO帖子后,我发现埃拉托色尼筛是生成质数的最好和最快的方法。 我想生成两个数之间的素数,比如和。 我们能降低《埃拉托色尼筛》中的空间复杂性吗?

  • 帮助我减少这个程序的时间复杂性 输出:为每个测试用例输出这样的对的数量。 约束条件:T≤10;N≤100000;A[i]≤1000000 示例输入(明文链接)

  • 主要内容:时间复杂度,空间复杂度《 算法是什么》一节提到,解决一个问题的算法可能有多种,这种情况下,我们就必须对这些算法进行取舍,从中挑选出一个“最好”的。 算法本身是不分“好坏”的,所谓“最好”的算法,指的是最适合当前场景的算法。挑选算法时,主要考虑以下两方面因素: 执行效率:根据算法所编写的程序,执行时间越短,执行效率就越高; 占用的内存空间:不同算法编写出的程序,运行时占用的内存空间也不相同。如果实际场景中仅能使用少量的内

  • 问题内容: 我想问一下下面代码的时间复杂度。是O(n)吗?(Math.pow()的时间复杂度是O(1)吗?)通常,Math.pow(a,b)的时间复杂度是O(b)还是O(1)?提前致谢。 问题答案: @Blindy讨论了Java可以采用的 可能 方法。 首先,一般情况 不能 重复相乘。对于指数不是整数的一般情况,它将不起作用。(签名是!) 在OpenJDK 8代码库中,的本机代码实现可以通过两种方

  • 问题内容: 我正在研究将RequestDTO发送到Web服务的类。我需要先验证请求,然后再发送。 可以从3个不同的地方发送请求,每个“ requesttype”都有不同的验证规则,例如request1必须具有名称和电话号码,request2必须具有地址,等等) 我有一个DTO,其中包含很长的字段列表(名称,地址,城市,电话号码等),无论请求是哪种类型,DTO都发送相同的消息。 我创建了3种不同的验

  • 下面的代码接受一个整数t,然后再接受3个整数t次,并返回可以同时从两个不同整数中减去1的最大次数,而当只剩下0以上的1个整数时,程序停止。我已经解决了这个问题,但我想降低代码的时间复杂度,但我不知道怎么做。 如何在不使用所有这些增加时间复杂度的循环的情况下获得相同的输出? 编辑:我不想我的代码为我重新编写,这是家庭作业,我想要的是提示和帮助,这样我就可以减少时间复杂性,我不知道怎么做。 编辑2:在

  • 以下代码是竞赛中问题陈述的解决方案。给出的时间限制为1s。该代码在5/7个测试用例中正常工作。对于其他情况,超过了时间限制。如何降低下面代码的时间复杂度? 编辑:问题陈述被定义为返回数字n的值或n/2、n/3、n/4之和,以最大值为准。例如,如果输入为24,则可以进一步减少或交换为12 8 6=26,12可以减少为6 4 3=13。8和6不应减少,因为这可能会降低值。最后的答案是13 8 6=27

  • 有人能帮我了解一下这个代码片段的时间和空间复杂性吗?请参考leetcode问题-单词中断II。给定一个非空字符串s和一个包含非空单词列表的字典单词dict,在s中添加空格来构造一个句子,其中每个单词都是有效的字典单词。返回所有这些可能的句子。