-
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)S。S必须>= 1。
system.primes 系统表类似。
以下查询是等价的:
示例
p >= 10^15 且 p 对 65537 取模余 1 的质数 p。
说明
- 速度最快的是使用默认步长 (
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,请省略它们。