Como encontrar os divisores de um número na prática
Achei divisores de um número pela primeira vez quando estava resolvendo um problema de criptografia no trabalho. Tinha que fatorar um inteiro de 8 dígitos e fazer isso na mão teoricamente era impossível. O que aprendi naquela sessão foi mais útil do que qualquer aula teórica. O conceito em si é simples — um divisor é qualquer número inteiro que divide outro sem deixar resto — mas a parte prática tem armadilhas que ninguém avisa. Pegar todos os divisores de um número N exige que você teste divisões de 1 até a raiz quadrada de N. Se um número k divide N perfeitamente, então ambos k e N/k são divisores. Isso reduz drasticamente o trabalho em comparação com testar até N. Por exemplo, para encontrar os divisores de 360, você testa apenas até 18 em vez de 360. A diferença é enorme quando N cresce.
O que você precisa saber sobre divisores de um numero
Os divisores de um número formam um conjunto fechado sob multiplicação e divisão quando o número é primo, mas a maioria dos inteiros que você encontra no dia a dia não é primo. O número 1 sempre divide tudo. O próprio número também sempre se divide. Esses dois são os limites naturais do conjunto. Um detalhe que muitos ignoram: para números grandes, testar divisibilidade por todos os inteiros até a raiz quadrada ainda é lento. A estratégia padrão é primeiro dividir por 2 repetidamente, depois por ímpares a partir de 3. Isso corta o tempo de execução em cerca de 70% em comparação com testar todos os números sem critério.
Outra coisa prática: se você já conhece a fatoração prima de um número, pode calcular todos os divisores diretamente sem fazer nenhuma divisão. Se N = p1^a1 * p2^a2 * ... * pk^ak, o número total de divisores é (a1+1)(a2+1)...(ak+1). E cada divisor é uma combinação das potências dos primos. Isso transforma o problema de uma busca brute force para um exercício de combinatoria simples. Chei a usar essa propriedade no campo quando precisei listar todos os divisores de um número composto grande que já tinha sido fatorado anteriormente. Foi questão de minutos em vez de horas. O limite é claro: se você não tem a fatoração prima, precisa encontrá-la primeiro, o que para números acima de 10^12 pode levar dias em hardware comum.
Uma armadilha comum é esquecer que divisores negativos também existem. Matematicamente, -3 divide 12 tão bem quanto 3. Em contextos computacionais, normalmente se considera apenas os divisores positivos, mas isso depende do problema.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Método passo a passo
Vamos ao procedimento direto. Para encontrar todos os divisores positivos de um inteiro N: 1. Inicie uma lista vazia. 2. Para i de 1 até floor(raiz_quadrada(N)), teste se N % i == 0. 3. Se sim, adicione i e N/i à lista. 4. Se i == N/i (o que acontece quando N é um quadrado perfeito), adicione apenas uma vez. 5. Ordene a lista final.
Para N = 60, por exemplo: teste 1 (divide, adiciona 1 e 60), teste 2 (divide, adiciona 2 e 30), teste 3 (divide, adiciona 3 e 20), teste 4 (divide, adiciona 4 e 15), teste 5 (divide, adiciona 5 e 12), teste 6 (divide, adiciona 6 e 10). Chega em 7 e 8 sem dividir. A lista ordenada fica: 1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30, 60. São 12 divisores no total. Se você vai fazer isso programaticamente, um loop simples em Python ou qualquer linguagem resolve em menos de um milissegundo para números abaixo de 10^9. Acima disso, aí sim a fatoração prima se torna a abordagem preferencial, se disponível.
Quando o método falha
O algoritmo de busca até a raiz quadrada tem um gargalo óbvio: para números primos grandes, ele testa todas as divisões possíveis e não encontra nenhum divisor além de 1 e o próprio número. Um primo de 20 dígitos vai exigir cerca de 10^10 divisões, o que em Python puro leva minutos. Em C ou Rust, segundos. A escolha da linguagem importa mais do que muitos pensam. Para números compostos com fatores primos muito desbalanceados — como um produto de dois primos grandes — o teste de divisibilidade até a raiz quadrada ainda é o método mais confiável, pois não há atalho conhecido para fatoração geral de inteiros. Esse é exatamente o problema que protocolos como RSA exploram.
Uma alternativa prática para quem não quer implementar do zero é usar bibliotecas especializadas. O sympy do Python, por exemplo, tem funções como factorint() e divisors() que já implementam otimizações avançadas, incluindo testes probabilísticos de primalidade. Para números pequenos e médios, o resultado é instantâneo. Para números grandes, ainda demora, mas geralmente mais rápido do que uma implementação caseira. Se o objetivo é apenas verificar se um número específico é divisor de outro, não precisa listar todos os divisores. A operação módulo (%) responde em tempo constante, independentemente do tamanho do número. Isso resolve a maioria dos casos reais sem overhead desnecessário.
Divisores próprios — todos os divisores exceto o próprio número — são úteis para classificar números como perfeitos, abundantes ou deficientes. Um número é perfeito quando a soma dos divisores próprios é igual a ele mesmo. Só existem 51 números perfeitos conhecidos e todos são pares, ligados a primos de Mersenne. É um tópico curioso mas irrelevante para a maioria das aplicações práticas. O que funciona na prática é entender que para a maioria dos casos do cotidiano, testar até a raiz quadrada é suficiente e não exige ferramentas complexas. Só quando N passa de 10^12 é que vale a pena investir em fatoração ou bibliotecas especializadas. Nada disso é difícil, mas exigência de tempo e memória muda drasticamente conforme o tamanho do número.