Табличная функция primes
-
primes()– возвращает бесконечную таблицу с единственным столбцомprime(UInt64), содержащим простые числа в порядке возрастания, начиная с 2. ИспользуйтеLIMIT(и при необходимостиOFFSET), чтобы ограничить количество строк. -
primes(N)– возвращает таблицу с единственным столбцомprime(UInt64), содержащим первыеNпростых чисел, начиная с 2. -
primes(N, M)– возвращает таблицу с единственным столбцомprime(UInt64), содержащимMпростых чисел, начиная сN-го простого числа (индексация с нуля). -
primes(N, M, S)– возвращает таблицу с единственным столбцомprime(UInt64), содержащимMпростых чисел, начиная сN-го простого числа (индексация с нуля) с шагомSпо индексу простого числа. Возвращаемые простые числа соответствуют индексамN, N + S, N + 2S, ..., N + (M - 1)S.Sдолжен быть>= 1.
Это аналогично системной таблице system.primes.
Следующие запросы эквивалентны:
Следующие запросы также эквивалентны:
Примеры
Первые 10 простых чисел.
Первое простое число, большее 1e15.
Решите задачу на сравнение по модулю для простых чисел в очень большом диапазоне: найдите первое простое число p >= 10^15 такое, что p по модулю 65537 даёт остаток 1.
Первые семь простых чисел Мерсенна.
Примечания
- Самые быстрые формы — это простые запросы с диапазоном и точечным фильтром, которые используют шаг по умолчанию (
1), напримерprimes(N)илиprimes() LIMIT N. Эти формы используют оптимизированный генератор простых чисел для эффективного вычисления очень больших простых чисел. - Для неограниченных источников (
primes()/system.primes) простые фильтры по значениям, такие какprime BETWEEN ...,prime IN (...)илиprime = ..., могут применяться во время генерации, чтобы ограничить диапазоны просматриваемых значений. Например, следующий запрос выполняется почти мгновенно:
- Эта оптимизация по диапазону значений не применяется к ограниченным табличным функциям (
primes(N),primes(offset, count[, step])) сWHERE, поскольку эти варианты определяют конечную таблицу по индексу простого числа, и для сохранения семантики фильтр должен вычисляться после генерации этой таблицы. - Использование ненулевого смещения и/или шага больше 1 (
primes(offset, count)/primes(offset, count, step)) может работать медленнее, поскольку функции может потребоваться сгенерировать дополнительные простые числа и затем отбросить их. Если вам не нужны смещение или шаг, просто не указывайте их.