english

Fórmula geradora de primos

Ao dividir um inteiro positivo qualquer nn por um inteiro positivo dd, o resultado somente será inteiro se dd for divisor de nn. Se nn for um número primo, os divisores são apenas 11 e o próprio nn. Se quisermos saber se um nn é primo, basta verificar se a divisão resulta num inteiro para divisores dd de 22 até o maior inteiro menor ou igual à raiz quadrada de nn. Para nn primo, nenhuma das divisões por k[2,n]k \in [2,\lfloor \sqrt{n} \rfloor] resulta em inteiro. Se multiplicarmos as partes fracionárias de todas as divisões, o valor somente será zero quando pelo menos um dos fatores for zero, isto é, quando o número for composto. Então a função abaixo, para nn maior que 33, vale zero apenas para os números compostos, e 11 caso contrário:

P(n)=k=2n(nknk)P(n)=\left\lceil\prod_{k=2}^{\lfloor \sqrt{n}\rfloor}\left(\frac{n}{k}-\left\lfloor\frac{n}{k}\right\rfloor\right)\right\rceil

Para nn de 11 a 33, o produtório vazio vale 11. Como 11 não é primo, podemos multiplicar o valor por

z(n)=nP(n)nz(n)=\left\lceil\frac{n-P(n)}{n}\right\rceil

que só vale zero para n=1n=1. Então a função abaixo, definida para inteiros positivos, devolve 11 para qualquer primo nn, e 00 caso contrário:

f(n)=z(n)P(n)f(n)=z(n) \cdot P(n)

A função π(n)\pi(n) conta quantos números primos existem de 11 a nn, usando a função ff anterior:

π(n)=m=1nf(m)\pi(n)=\sum_{m=1}^{n} f(m)

O valor de π(0)\pi(0) é definido como zero, correspondente ao somatório vazio.

Vamos definir uma função dm(k)d_m(k) que vale 11 quando k=mk=m, e zero caso contrário:

dm(k)=11+(mk)2d_m(k)=\left\lfloor \frac{1}{1+(m-k)^2} \right\rfloor

Quando kmk\neq m, o denominador fica maior que 11, e a expressão inteira vale zero. Caso contrário, vale 11. Então dn(k)d_{n}(k) vale 11 apenas quando k=nk=n, para algum nn fixo.

Se tivermos um limitante superior NN para o n-ésimo primo, podemos construir uma função que devolve o n-ésimo primo somando os candidatos kk que podem ser o n-ésimo primo, multiplicados por uma função que seleciona apenas o primeiro kk tal que π(k)=n\pi(k)=n.

p(n)=k=1Nkdn(π(k))dn1(π(k1)) p(n)=\sum_{k=1}^{N} k \cdot d_n(\pi(k)) \cdot d_{n-1}(\pi(k-1))

Quando o índice kk for tal que π(k)=n\pi(k)=n e π(k1)=n1\pi(k-1)=n-1, teremos encontrado exatamente o n-ésimo primo.

Sabendo que p(n)p(n) cresce aproximadamente como nlnnn \ln n, podemos usar limitantes superiores como:
N=2+n(lnn+ln(1+lnn))N=n2+1N=22n\begin{array}{l} N = \left\lfloor 2+n \cdot (\ln n + \ln \left( 1 + \ln n \right)) \right\rfloor \\ N = n^2+1 \\ N = 2^{2^n} \end{array}

O primeiro baseia-se no fato de que p(n)p(n) é menor que n(lnn+ln(lnn))n⋅(\ln n+\ln(\ln n)) para n6n \geq 6, sendo os casos menores verificáveis diretamente. O último cresce bastante rápido, e serve como garantia quando não se tem uma boa noção de quanto vale o primo p(n)p(n).

Obviamente a fórmula não é eficiente. Ela nada mais é que a notação matemática para o algoritmo de teste de primalidade que faz uso de divisões sucessivas até a raiz quadrada do número sendo testado.

Esta fórmula foi criada (descoberta?) em 2026-05-04 por José Eduardo Gaboardi de Carvalho (edu.a1978 at gmail).