O básico que todo mundo explica errado
Encontrar divisores de um número é simplesmente verificar quais inteiros dividem esse número sem deixar resto. Na prática, a maioria das pessoas começa testando 1, 2, 3, 4... até chegar no próprio número. Isso funciona para números pequenos, mas se você tiver que lidar com algo como 847.293, vai perder tempo precioso testando cada candidato manualmente. O ponto que ninguém enfatiza suficiente: você só precisa testar divisores até a raiz quadrada do número. Se n é divisível por algum valor maior que n, então o quociente correspondente será necessariamente menor que n e já foi encontrado. Isso reduz drasticamente o trabalho. Para 847.293, em vez de testar 847 mil candidatos, você testa apenas até 920.
como descobrir os divisores de um número na prática
Vou mostrar o método direto. Pegue o número n. Calcule n. Itere de 1 até esse limite. Para cada i que divide n exatamente, anote tanto i quanto n/i. Pronto. Os divisores são todos esses pares. Exemplo rápido com 36. Raiz quadrada é 6. Testa-se 1 (divide, então temos 1 e 36), 2 (divide, temos 2 e 18), 3 (divide, temos 3 e 12), 4 (divide, temos 4 e 9), 5 (não divide, ignora), 6 (divide, temos 6 e 6 — conta uma única vez porque é o mesmo divisor). Divisores de 36: 1, 2, 3, 4, 6, 9, 12, 18, 36. Total de 9 divisores.
Se o número for grande demais para calcular manualmente, eu uso um script simples em Python. Não precisa de biblioteca nenhuma, só um loop básico com módulo. Em minha máquina, encontrar todos os divisores de um número de até 10 dígitos leva menos de meio segundo. Para números com 15 ou mais dígitos, o tempo cresce exponencialmente e aí a coisa fica complicada de verdade.
O problema que ninguém conta
Quando eu precisava calcular divisores de números grandes para um projeto de criptografia, descobri algo chato: o método de força bruta até n funciona bem até certo ponto, mas para números acima de 10^12 o tempo de execução começa a ficar impraticável. Um número como 999999999989 (que é primo) faz o loop inteiro rodar até cerca de 1 milhão de iterações. Em Python puro, isso leva alguns segundos. Em C, milissegundos. A diferença é absurda se você precisa fazer isso em batch. A solução que eu adotei foi uma combinação: primeiro testar divisibilidade por primos pequenos até 1000 usando um crivo pré-calculado, e só se nada fosse encontrado até aí é que eu partia para o teste até n. Esse filtro inicial elimina a maioria dos compostos rapidamente. Números com fatores pequenos são resolvidos em microssegundos; os difíceis (produtos de dois primos grandes) ainda exigem o loop completo.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Fatores primos versus divisores: confusão comum
Muita gente confunde encontrar os divisores com encontrar a fatoração em primos. São coisas relacionadas mas diferentes. A fatoração prima de 36 é 2² × 3². A partir dela, dá para gerar todos os divisores sem testar nada: basta combinar as potências possíveis de cada primo. Os divisores serão 2^a × 3^b onde a {0,1,2} e b {0,1,2}. Isso gera 3 × 2 = 6 combinações... espera, 36 tem 9 divisores. O erro é meu na contagem acima — são (2+1)(2+1) = 9, certo. a vai de 0 a 2 (3 opções), b vai de 0 a 2 (3 opções). 3 × 3 = 9 divisores. Confere. Esse caminho é muito mais eficiente quando você já tem a fatoração prima. O problema é que fatorar números grandes em primos é, por si só, um problema difícil. Existem algoritmos como o trial division otimizado, Pollard's rho e até o quadratic sieve para números maiores. Mas isso já é outro nível de complexidade.
Armadilhas que eu caí várias vezes
A primeira vez que escrevi um script para listar divisores, esqueci de tratar o caso em que i == n/i. O número aparecia duplicado na lista. Sim, bobagem, mas é fácil passar despercebido quando o output é uma lista longa e você só olha se o total bate. Outra armadilha: números perfeitos. Quando você testa 6, os divisores próprios (excluindo o próprio número) somam exatamente 6. Isso é interessante matematicamente mas não muda o algoritmo. Só serve para dar dor de cabeça se você estiver programando sem testar casos extremos.
Se o número for negativo, lembre-se de que divisores podem ser tanto positivos quanto negativos. Tecnicamente, -3 também é divisor de 36. Na maioria dos contextos práticos, trabalhamos apenas com divisores positivos, mas é bom saber que a definição matemática completa inclui os negativos.
Limitações reais
O método de testar até n tem um limite prático claro: para números com 20+ dígitos, mesmo otimizado, pode levar horas ou dias dependendo do hardware. Nesses casos, a abordagem recomendada é usar fatoração polonêsa ou ferramentas especializadas como o factor do GNU coreutils, que implementa algoritmos muito mais sofisticados por baixo dos panos. Para a maioria das aplicações do dia a dia — exercícios de matemática, verificação rápida, scripts simples — o método manual ou um loop em Python resolve sem dor. A coisa só fica séria quando você entra no território de criptografia RSA ou números primos gigantes.
Se quiser um script pronto, um search por "divisor finder python" no GitHub te dá várias implementações funcionais. Eu mantenho a minha própria num repositório privado, mas o código é trivial o suficiente para não valer o esforço de hospedar.