Começando pelo que funciona na prática
O método mais confiável para encontrar números primos é o Crivo de Eratóstenes. Você escreve os números de 2 a 100, marca o 2 como primo e risca todos os seus múltiplos. Depois pega o próximo número não riscado, que é o 3, marca como primo e risca os múltiplos dele. Repete até a raiz quadrada do 100, que é 10. Os que sobrarem são primos. A lista final fica assim: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89 e 97. São 25 números no total, se você contar certo.
Como entender número primos de 1 a 100 de verdade
A primeira coisa que as pessoas erram é incluir o 1 na lista. O 1 não é primo. Um número primo tem exatamente dois divisores distintos: ele mesmo e o número 1. O 1 tem apenas um. Se você deixar o 1 entrar, teoremas como o da fatoração única em inteiros quebram na hora. Nunca esquece disso. Outro erro comum é achar que todo número ímpar é primo. 9, 15, 21, 25, 27, 33, 35, 39, 45, 49, 51, 55, 57, 63, 65, 69, 75, 77, 81, 85, 87, 91, 93, 95, 99. Todos esses são compostos. O crivo resolve isso automaticamente, mas se alguém fizer uma verificação manual com divisão, vai passar esses números sem perceber.
No meu trabalho com criptografia e testes de primalidade, tive um caso em que um script simples de verificação deu falso positivo para o 91. O algoritmo checa divisibilidade até a raiz quadrada, e 91 é 7 vezes 13. A raiz quadrada de 91 é aproximadamente 9,5. Se o loop só chegava até 9, o 7 nunca era testado. A correção foi garantir que a condição do loop usasse `<= raiz_quadrada(n)`, não `
raiz_quadrada(n)`. Pequeno detalhe que causava erro silencioso. Há ainda algo que pouca gente menciona: os pares. Exceto o 2, nenhum número par é primo. Isso elimina metade dos candidatos imediatamente. Se você está otimizando um código que checa primalidade, pode pular todos os pares depois do 2 e ganhar performance considerável sem complicar nada.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Os gaps entre primos consecutivos também variam bastante. O maior intervalo na faixa de 1 a 100 é entre o 89 e o 97, com 7 números compostos no meio. Antes disso, o gap de 6 aparece várias vezes. Nada extraordinário, mas útil saber se você está trabalhando com distribuição de primos ou gerando sequências para algum teste. Se você precisa apenas da lista pronta, não tem muito segredo. Mas se for construir algo que depende desses números, considere usar o crivo como base. Ele é rápido, previsível e não depende de bibliotecas externas. Para uma faixa pequena como essa, leva menos de um milissegundo em qualquer linguagem razoável.
Uma limitação que merece atenção: o crivo de Eratóstenes gasta memória proporcional ao intervalo. Se você precisar escalar para milhões ou bilhões, o Crivo Segmentado é uma alternativa necessária. Ele divide o intervalo em blocos que cabem na cache, reduzindo drasticamente o uso de memória. Para 1 a 100, isso é overkill, mas é bom saber que a opção existe quando o problema cresce.