-
primes() – Renvoie une table infinie avec une seule colonne prime (UInt64) contenant des nombres premiers par ordre croissant, à partir de 2. Utilisez LIMIT (et éventuellement OFFSET) pour limiter le nombre de lignes.
-
primes(N) – Renvoie une table avec une seule colonne prime (UInt64) contenant les N premiers nombres premiers, à partir de 2.
-
primes(N, M) – Renvoie une table avec une seule colonne prime (UInt64) contenant M nombres premiers à partir du N-ième nombre premier (indexation à partir de 0).
-
primes(N, M, S) – Renvoie une table avec une seule colonne prime (UInt64) contenant M nombres premiers à partir du N-ième nombre premier (indexation à partir de 0), avec un pas S selon l’indice des nombres premiers. Les nombres premiers renvoyés correspondent aux indices N, N + S, N + 2S, ..., N + (M - 1)S. S doit être >= 1.
Cette fonction est similaire à la table système system.primes.
Les requêtes suivantes sont équivalentes :
Les requêtes suivantes sont également équivalentes :
Les 10 premiers nombres premiers.
Le premier nombre premier supérieur à 1e15.
Résolvez une contrainte modulaire sur les nombres premiers dans un très grand intervalle : trouvez le premier nombre premier p >= 10^15 tel que p modulo 65537 soit égal à 1.
Les 7 premiers nombres premiers de Mersenne.
- Les formes les plus rapides sont les requêtes simples de plage et de filtrage par point qui utilisent le pas par défaut (
1), par exemple primes(N) ou primes() LIMIT N. Ces formes utilisent un générateur de nombres premiers optimisé pour calculer efficacement de très grands nombres premiers.
- Pour les sources non bornées (
primes() / system.primes), des filtres simples sur la valeur, tels que prime BETWEEN ..., prime IN (...) ou prime = ..., peuvent être appliqués lors de la génération afin de restreindre les plages de valeurs recherchées. Par exemple, la requête suivante s’exécute presque instantanément :
- Cette optimisation de plage de valeurs ne s’applique pas aux fonctions de table bornées (
primes(N), primes(offset, count[, step])) avec WHERE, car ces variantes définissent une table finie en fonction de l’indice des nombres premiers, et le filtre doit être évalué après la génération de cette table pour préserver la sémantique.
- L’utilisation d’un offset non nul et/ou d’un pas supérieur à 1 (
primes(offset, count) / primes(offset, count, step)) peut être plus lente, car il peut être nécessaire de générer puis d’ignorer en interne des nombres premiers supplémentaires. Si vous n’avez pas besoin d’un offset ou d’un pas, omettez-les.
Dernière modification le 2 juillet 2026