Como verificar se um número é primo usando divisão por tentativa
O método mais direto para testar primalidade é dividir o número por todos os inteiros de 2 até a raiz quadrada dele. Se alguma divisão resultar em resto zero, o número não é primo. Esse é o algoritmo que quase todo mundo aprende na escola e que funciona bem para números pequenos ou médios.
5713 é um numero primo? Não. Eu já perdi tempo verificando isso manualmente e descobri que 5713 = 29 × 197. O teste rápido é simples: você divide por 29 e vê que dá exato. Isso significa que 5713 claramente não passa no filtro de primalidade, mesmo que à primeira vista não pareça óbvio.
Algoritmo passo a passo
Você pega um número n qualquer. Calcula a raiz quadrada dele. Itera de 2 até esse limite. Se encontrar algum divisor, retorna falso imediatamente. Se o loop terminar sem encontrar divisor, retorna verdadeiro. O código em Python seria algo como isso:
```python
import math
def is_prime(n):
if n < 2:
return False
for i in range(2, int(math.isqrt(n)) + 1):
if n % i == 0:
return False
return True
```
A parte da raiz quadrada é essencial. Sem ela, você faria operações desnecessárias. Para um número como 5713, a raiz quadrada é aproximadamente 75,5. Você só precisa testar divisores até 75. Testar até a metade do número ou até o próprio número seria completamente inútil e perda de tempo.
Pitfalls comuns que iniciantes cometem
Muita gente esquece de tratar números menores que 2. Números negativos, zero e um não são primos por definição. Outro erro frequente é usar `n // 2` como limite em vez de `math.isqrt(n)`. Isso funciona, mas é menos eficiente. Para números grandes, a diferença é significativa.
Outra armadilha é confiar na intuição visual. Alguns números parecem primos porque não têm divisores óbvios como 2, 3 ou 5. O número 5713 é um exemplo clássico. Ele não é divisível por 2 (ímpar), por 3 (soma dos dígitos é 16), nem por 5 (não termina em 0 ou 5). A intuição diz que pode ser primo. A verificação mostra que não é.
Limitações do método de divisão por tentativa
Esse método é simples, mas tem um problema claro: ele não escala bem. Para números com dezenas ou centenas de dígitos, como os usados em criptografia RSA, a divisão por tentativa é impraticável. Um número de 200 dígitos exigiria cerca de 10^100 operações no pior caso. Isso leva bilhões de anos mesmo em hardware moderno.
Para esses casos, você precisa de testes probabilísticos como Miller-Rabin ou testes determinísticos mais sofisticados como AKS. O Miller-Rabin é rápido e prático para a maioria das aplicações. Você escolhe alguns bases fixas e testa se o número passa pelo critério de Fermat para essas bases. Se passar, há uma alta probabilidade de ser primo. Existem contrapartidas: números pseudo-primos existem, mas são raros para bases adequadas.
Exceções e casos de borda
Em uma ocasião específica, eu estava validando certificados num sistema legado e encontrei um bug onde o código de primalidade usava ponto flutuante para calcular a raiz quadrada. Para números grandes próximos de limites de precisão, isso gerava resultados errados. O trabalho-around foi usar `math.isqrt()` do Python 3.8+, que opera inteiramente com inteiros e não tem problema de precisão.
Números perfectos também merecem menção. Um número perfeito é aquele que é igual à soma de seus divisores próprios. O primeiro é 6 (1+2+3), o segundo é 28 (1+2+4+7+14). Existe relação entre números perfeitos e primos de Mersenne, mas isso é outro tópico.
Alternativas para verificação prática
Se você precisa verificar primalidade com frequência, considere usar bibliotecas estabelecidas. O módulo `sympy` do Python tem funções otimizadas em C. A função `isprime()` dele combina testes de divisibilidade, Miller-Rabin e outros métodos. Para uso em produção, essa é a escolha mais segura.
Números primos grandes são a base da segurança moderna. Chaves RSA de 2048 bits dependem da dificuldade de fatoração. Esse é o motivo pelo qual a primalidade eficiente importa na prática. Verificar se um número gerado aleatoriamente é primo é um passo necessário na geração de chaves.
Galeria
Números primos: como saber se um número é primo ou não! - YouTube
713 é um número primo? - Calculatio
Aprenda o que são números primos e como verificar se um número é primo ...
Por Que O Número 2 É Primo? | Quais são os Números Primos? – EZND
Numero Primo In Enciclopedia Della Matematica – KYPB