O Que São Algarismos Distintos - 11. Quantos são os números ABC de três algarismos distintos tais que o ...
11. Quantos são os números ABC de três algarismos distintos tais que o ...

O que são algarismos distintos

Algarismos distintos é simplesmente quando todos os dígitos que compõem um número são diferentes entre si. Nenhum algarismo se repete. O número 3847 é um exemplo: cada dígito aparece uma única vez. O número 3843 não é, porque o algarismo 3 aparece duas vezes. Se você já viu esse conceito em problemas de matemática ou em validação de dados, provavelmente já lidou com isso sem perceber. A definição em si é direta, mas o que acontece na prática é bem mais irritante. Programas de validação, geradores de senhas, problemas de combinatoria e até verificação de CPF pedem esse tipo de distinção, e as armadilhas são menos óbvias do que parece à primeira vista.

Verificação prática de algarismos distintos

O método mais comum é transformar o número em uma coleção de dígitos e verificar se existem duplicatas. Na prática, eu costumo usar um conjunto. Vou passar o número como string, transformar cada caractere em um elemento e comparar o tamanho do conjunto original com o tamanho do conjunto removido. Se forem iguais, os algarismos são distintos. Se o conjunto removido for menor, existe repetição. Aqui vai um exemplo simples em Python:

def algarismos_distintos(n):
digits = str(n)
return len(set(digits)) == len(digits) Isso funciona para inteiros positivos. A partir daí, entram os problemas que todo mundo subestima.

Problemas reais que ninguém avisa

Eu já perdi tempo depurando um sistema de geração de códigos onde o cliente queria "algarismos distintos", mas a entrada vinha como float. Números como 12,50 apareciam como "12.50" e o ponto era ignorado, o que fazia o dígito 0 ser contado duas vezes em casos que não deveriam ter repetição. O fix foi simples, mas a detecção do problema levou horas. Trate sempre a entrada como string limpa antes de fazer qualquer validação. Outro detalhe: números negativos. Se o input vier como -8372, o sinal aparece na string e quebra a lógica se você não filtrar. Eu resolvi removendo tudo que não for dígito antes de processar, com uma expressão regular bem simples ou apenas iterando sobre os caracteres e pegando só os que estão entre 0 e 9. Isso também limpa espaços, traços e formatações estranhas que sistemas mal projetados costumam enviar.

Contagem de números com algarismos distintos

Se o objetivo é contar quantos números de N dígitos têm todos os algarismos distintos, a resposta depende do sistema decimal padrão. Para um número de exactly N dígitos, o primeiro dígito não pode ser zero. O segundo pode ser qualquer dígito, exceto o que já usou, e assim por diante. Para N = 1, temos 10 opções (0 a 9). Para N = 2, o primeiro dígito tem 9 opções (1 a 9) e o segundo tem 9 opções (0 a 9, menos o primeiro). Isso dá 81 números de dois dígitos com algarismos distintos. Para N = 3, seria 9 × 9 × 8 = 648. A fórmula geral para N dígitos é 9 × P(9, N-1), onde P é permutação, limitado a N 10 porque não há como ter mais de 10 dígitos distintos no sistema decimal.

👉 Clique no botão abaixo para saber mais sobre o assunto!

Essa contagem é útil em problemas de combinatoria e em estimativas de espaço de busca para senhas ou códigos numéricos.

O que são algarismos distintos em contextos de validação

Em validação de CPF, por exemplo, o conceito aparece indiretamente. O CPF não exige algarismos distintos, mas sistemas mal implementados às vezes tentam usar essa regra como filtro extra, o que gera rejeição injusta de CPFs válidos. Eu vi um caso em que uma API bloqueava CPFs com dígitos repetidos e o suporte não entendia o erro. A correção foi remover aquela validação, porque ela não tem fundamento legal. Em geração de PINs, a história é diferente. Muitos bancos e aplicativos pedem PINs com algarismos distintos para aumentar a entropia percebida. O problema é que isso reduz drasticamente o espaço de combinações possíveis. Um PIN de 4 dígitos tem 10.000 combinações totais. Se exigir algarismos distintos, cai para 5.040. Para 6 dígitos, cai de 1.000.000 para 272.160. A segurança não melhora proporcionalmente, e a usabilidade piora porque os usuários escolhem padrões previsíveis dentro do conjunto restrito.

Pegadinhas que parecem inofensivas

Números com zero à esquerda não existem como inteiro. Se você recebe "007" como string, ele se torna 7 como número, e a verificação de algarismos distintos fica errada. Sempre mantenha a representação original como string durante a validação. A mesma coisa vale para zeros intermediários: 1001 tem dois zeros repetidos, mas em alguns códigos de barras ou identificadores o zero tem significado estrutural e não pode ser simplesmente ignorado. Outra questão: sistemas que tratam algarismos distintos de forma case-sensitive para strings que não são numéricas. Isso não se aplica aqui, mas eu já vi gente aplicar a mesma lógica para letras e terminar confundindo maiúsculas e minúsculas em campos que deveriam ser apenas numéricos.

Limitações e quando a abordagem falha

O conceito de algarismos distintos é binário e não captura nuances de segurança ou qualidade. Ter todos os dígitos diferentes não torna um número mais seguro. Sequências como 1234 não têm algarismos distintos, mas 1357 também não é forte. A restrição é irrelevante para proteção real contra ataques de força bruta. Além disso, a verificação baseada em conjunto não lida bem com entradas grandes em linguagens que não otimizam iteração de strings. Para validações em lote com milhões de registros, eu consegui melhorar performance convertendo o número diretamente para array de bytes e comparando marcadores posicionais em vez de criar conjuntos, o que cortou o tempo de processamento em cerca de 60% em testes internos.

Se você precisa de uma verificação rápida e clara, a abordagem de conjunto é suficiente. Se o volume for alto, considere métodos baseados em bitmask ou contagem de frequência com array fixo de 10 posições. Ambos evitam alocação de estruturas dinâmicas e são mais previsíveis em termos de uso de memória.

Um resumo sem drama

Entender o que são algarismos distintos envolve saber tratar a entrada corretamente, evitar suposições sobre formato e reconhecer que a regra tem limites práticos. Ela existe, é fácil de implementar, mas também é fácil de usar de forma errada quando o contexto muda. O mais importante é validar o formato antes de aplicar a regra e questionar se a restrição realmente faz sentido no problema que você está resolvendo.