跳转到主要内容
  • primes() – 返回一个无限表,仅包含一个 prime 列 (UInt64) ,其中的值是按升序排列、从 2 开始的质数。使用 LIMIT (也可选用 OFFSET) 可限制返回的行数。
  • primes(N) – 返回一个仅包含 prime 列 (UInt64) 的表,其中包含从 2 开始的前 N 个质数。
  • primes(N, M) – 返回一个仅包含 prime 列 (UInt64) 的表,其中包含从第 N 个质数 (从 0 开始计数) 起的 M 个质数。
  • primes(N, M, S) – 返回一个仅包含 prime 列 (UInt64) 的表,其中包含从第 N 个质数 (从 0 开始计数) 起、按质数索引以步长 S 选取的 M 个质数。返回的质数对应的索引为 N, N + S, N + 2S, ..., N + (M - 1)SS 必须 >= 1
这与 system.primes 系统表类似。 以下查询是等价的:
以下查询也等价:

示例

前 10 个质数。
大于 1e15 的第一个质数。
在极大的范围内求解一个关于质数的模约束:找出第一个满足 p >= 10^15p65537 取模余 1 的质数 p
前 7 个梅森质数。

说明

  • 速度最快的是使用默认步长 (1) 的普通范围查询和点过滤查询形式,例如 primes(N)primes() LIMIT N。这些形式使用经过优化的质数生成器,可高效计算非常大的质数。
  • 对于无界源 (primes() / system.primes) ,像 prime BETWEEN ...prime IN (...)prime = ... 这样的简单值过滤条件可以在生成过程中应用,以限制搜索范围。例如,以下查询几乎是瞬间执行的:
  • 此值域优化不适用于带有 WHERE 的有界表函数 (primes(N)primes(offset, count[, step])) ,因为这些变体按质数索引定义的是有限表;为保持语义不变,必须先生成该表,再计算过滤器。
  • 使用非零的 offset 和/或大于 1 的 step (primes(offset, count) / primes(offset, count, step)) 可能会更慢,因为内部可能需要生成并跳过更多质数。如果不需要 offset 或 step,请省略它们。
最后修改于 2026年7月2日