0 É Divisível Por 43
Divisibilidade por zero: o que todo mundo erra
Você já viu alguém travar num fórum de programação perguntando se 0 é divisível por 43. A resposta curta é sim. A resposta longa é o que importa aqui, porque a confusão geralmente vem de mal-entendidos sobre como lidam com operações de módulo quando o dividendo é zero. Em matemática pura, a definição de divisibilidade diz que um inteiro a é divisível por um inteiro b (b != 0) se existir um inteiro k tal que a = b * k. Aplicando isso: 0 = 43 * 0. O quociente é 0 e o resto é 0. Pronto. 0 é divisível por qualquer número inteiro diferente de zero.
0 é divisível por 43
Sim. E não, não é uma exceção. É exatamente o que a definição prevê. O resto da divisão de 0 por 43 é zero. Em Python, 0 % 43 retorna 0. Em C, 0 % 43 retorna 0. Em Java, o mesmo. A maioria das linguagens segue a convenção matemática aqui. Eu já passei por um problema específico num sistema de processamento de pagamentos onde precisávamos validar se um valor de transação era múltiplo de 43 para fins de conciliação contábil. A transação de valor zero entrava no sistema e o script de validação simplesmente ignorava esses registros, tratando-os como inválidos. Perdi duas horas num debugging porque a lógica usava uma verificação do tipo if (valor % 43 != 0) e os valores zero estavam sendo descartados como "não múltiplos". A solução foi ajustar a condição para explicitly incluir o caso zero: if (valor == 0 || valor % 43 == 0). Sim, parecia óbvio agora, mas na pressa do deploy ninguém tinha pensado nisso. O que as pessoas costumam confundir é a diferença entre "divisível por" e "pode dividir por". 0 é divisível por 43 porque 43 cabe em 0 exatamente zero vezes. O que não funciona é dividir qualquer coisa por 0. Isso sim é indefinido e a maioria das linguagens vai te dar erro ou retornar um valor especial (Infinity em JavaScript, exceção em Java/Cpara inteiros).
Um detalhe importante que quase ninguém menciona: em algumas linguagens mais antigas ou com configurações específicas de compilação, o comportamento do operador módulo com números negativos pode variar. Mas com o dividendo sendo exatamente zero, isso não é problema. Zero é zero em qualquer base, qualquer sign, qualquer representação. Outro ponto prático: se você está escrevendo testes unitários para funções que verificam divisibilidade, incluir um teste com 0 como entrada é importante. É o caso limite que mais quebra implementações amadoras. Um teste como assert(divisible(0, 43)) deveria passar sempre. Se passar, sua função está pelo menos correta no caso trivial. Em resumo, não tem pegadinha. 0 dividido por 43 dá quociente 0 e resto 0. O operador módulo funciona sem problema. O único cuidado é não tratar zero como um caso especial quando ele não precisa ser tratado como tal.