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))可能会更慢,因为内部可能需要先生成并跳过额外的质数。如果你不需要偏移量或步长,可以省略这两个参数。