primes 表函数
primes() – 返回一个具有无限行、仅包含名为 prime 的单列(UInt64)的表,该列按升序包含从 2 开始的素数。使用 LIMIT(以及可选的 OFFSET)来限制行数。
primes(N) – 返回一个仅包含 prime 列(UInt64)的表,该列包含从 2 开始的前 N 个素数。
primes(N, M) - 返回一个仅包含 prime 列(UInt64)的表,该列包含从第 N 个素数开始的 M 个素数(素数索引从 0 开始计数)。
primes(N, M, S) - 返回一个仅包含 prime 列(UInt64)的表,该列包含从第 N 个素数开始、按步长 S(按素数索引)的 M 个素数(素数索引从 0 开始计数)。返回的素数对应索引 N, N + S, N + 2S, ..., N + (M - 1)S。S 必须 >= 1。
这与 system.primes 系统表类似。
以下查询是等价的:
下面的查询是等价的:
示例
前 10 个质数。
第一个大于 1e15 的素数。
前 7 个梅森素数。
注意
- 速度最快的是使用默认步长(
1)的简单区间形式和点过滤形式,例如primes(N)或primes() LIMIT N。这些形式使用经过优化的素数生成器,可以高效地计算非常大的素数。例如,下面的查询几乎可以瞬间完成:
- 使用非零偏移量和/或大于 1 的步长(
primes(offset, count)/primes(offset, count, step))可能会更慢,因为内部可能需要先生成并跳过额外的质数。如果你不需要偏移量或步长,可以省略这两个参数。