给定两个间隔,如何对分段筛进行编码?

时间:2018-09-27 05:52:01

标签: c++14

我清楚地了解了Eratosthenes筛子,但是在理解分段筛子时遇到了麻烦。我的问题是给定两个范围

(a=b=10^8) 

如何找到这两个间隔之间的质数,其中

b-a<=10^5)

请帮助我设计代码。

1 个答案:

答案 0 :(得分:0)

查看此链接以获取C ++实现,并解释单个范围n https://www.geeksforgeeks.org/segmented-sieve/的分段筛子

对于a到b范围为上限10 ^ 8的情况,最大段大小将为sqrt(10 ^ 8)= 10,000,并且差异ba的上限为10 ^ 5时,您将有一个最多要处理10个段。

从给定的链接中提取算法,并将范围b用作输入n并计算基本向量素数,然后调整限制

 // Divide the range [0..n-1] in different segments 
// We have chosen segment size as sqrt(n). 
int low = limit; 
int high = 2*limit; 

将低设置为最接近的极限值<= a,并忽略输出中的任何结果

这应该可以解决您提出的问题。