我清楚地了解了Eratosthenes筛子,但是在理解分段筛子时遇到了麻烦。我的问题是给定两个范围
(a=b=10^8)
如何找到这两个间隔之间的质数,其中
b-a<=10^5)
请帮助我设计代码。
答案 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,并忽略输出中的任何结果
这应该可以解决您提出的问题。