← 中文资源

简体中文版本

分段埃拉托色尼素数筛(JavaScript)

用分段筛法生成 n 以内所有素数,在大范围上节省内存。

阅读英文原文

功能说明

分段埃拉托色尼素数筛是一个面向data-integrity场景的javascript代码示例。用分段筛法生成 n 以内所有素数,在大范围上节省内存。该示例展示了如何在实际项目中运用这一技术,代码结构清晰,便于理解和复用。

关键实现

该示例使用javascript语言实现,核心逻辑封装在函数中。代码遵循语言惯用风格,处理了边界情况,并考虑了性能与可读性的平衡。tags 标签包括:prime-sieve、eratosthenes、number-theory,方便在平台上检索同类示例。

使用注意

使用本示例时需要注意输入约束和边界条件。该示例为代码片段(isSnippet),可直接嵌入到项目中使用。建议在实际应用前,根据业务需求调整参数和错误处理* 建议在实际应用前,根据业务需求调整参数和错误处理策略。relatedExamples 中列出了相关的其他示例,可供参考学习。

验证方式

可通过编写单元测试验证该示例的正确性。测试应覆盖正常输入、边界值和异常情况。确保在目标运行环境中测试代码的兼容性和性能表现。updatedDate 为 2026-10-25,已通过审核并发布。

代码示例

function segmentedSieve(n) {
  if (n < 2) return [];
  const limit = Math.floor(Math.sqrt(n)) + 1;
  const basePrimes = [];
  const isComp = new Array(limit).fill(false);
  for (let i = 2; i < limit; i++) {
    if (!isComp[i]) { basePrimes.push(i); for (let j = i * i; j < limit; j += i) isComp[j] = true; }
  }
  const primes = [...basePrimes];
  const segSize = 1 << 15;
  for (let low = limit; low <= n; low += segSize) {
    const high = Math.min(low + segSize - 1, n);
    const seg = new Array(high - low + 1).fill(false);
    for (const p of basePrimes) {
      let start = Math.ceil(low / p) * p;
      for (let j = start; j <= high; j += p) seg[j - low] = true;
    }
    for (let i = 0; i < seg.length; i++) if (!seg[i] && low + i >= 2) primes.push(low + i);
  }
  return primes;
}