english

Fórmula geradora de primos

Para descobrir se um número é primo, podemos fazer as divisões por candidatos a fatores do número até a raiz quadrada desse número. Se o resto de alguma divisão por fator maior que 11 for zero, então o número não é primo. Caso contrário, é primo.

Para detectar quando um quociente é inteiro, faremos uso da função dm(n)d_m(n) definida abaixo para um inteiro mm qualquer. dmd_m vale 11 quando o inteiro nn for igual a mm, e zero caso contrário:

dm(n)=11+mnd_m(n)=\left\lfloor \frac{1}{1+ \left| m-n \right| } \right\rfloor

Quando nmn \neq m, o denominador fica maior que 11, e a expressão inteira vale zero. Quando n=mn=m, o valor é 11. A função dmd_m também poderia ser definida para reais mm e nn e funcionaria da mesma forma, mas não será necessário para o uso a seguir.

A função P(n)P(n) abaixo faz uso da função d0d_0 para verificar se o número nn possui algum fator inteiro k=2,3,,nk = 2, 3, \dots, \lfloor \sqrt{n} \rfloor, passando para d0d_0 o resto da divisão de nn por kk, dado por nknkn-k \left\lfloor\frac{n}{k}\right\rfloor:

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

Para n4n \ge 4, todos os fatores de P(n)P(n) são iguais a 11 se nn for primo, portanto P(n)=1P(n)=1. Se nn for composto, algum fator 00 fará com que P(n)=0P(n)=0.

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.

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 \cdot (\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).