Calcule operações de aritmética modular incluindo módulo, inverso modular e exponenciação modular para criptografia e teoria dos números.
O que é Aritmética Modular?
Aritmética modular é um sistema de aritmética para números inteiros onde os números "circulam" após atingir um determinado valor (o módulo). É frequentemente descrita como "aritmética de relógio".
A expressão a mod m fornece o resto quando a é dividido por m. Por exemplo, 17 mod 5 = 2 porque 17 = 3 × 5 + 2.
Operações Básicas
Aritmética modular suporta todas as operações básicas:
- Adição: (a + b) mod m = ((a mod m) + (b mod m)) mod m
- Subtração: (a - b) mod m = ((a mod m) - (b mod m)) mod m
- Multiplicação: (a × b) mod m = ((a mod m) × (b mod m)) mod m
Exponenciação Modular
Exponenciação modular calcula a^b mod m eficientemente usando o algoritmo de quadrado e multiplicação. Isso é crucial para criptografia RSA.
Por exemplo, 3^5 mod 7 = 243 mod 7 = 5.
Inverso Modular
O inverso modular de a módulo m é um número x tal que:
a × x ≡ 1 (mod m)
Um inverso modular existe apenas quando a e m são coprimos (mdc(a, m) = 1). É calculado usando o Algoritmo de Euclides Estendido.
Por exemplo, o inverso de 3 mod 7 é 5, porque 3 × 5 = 15 ≡ 1 (mod 7).
Aplicações da Aritmética Modular
Aritmética modular é fundamental em muitas áreas:
- Criptografia: Criptografia RSA, troca de chaves Diffie-Hellman
- Ciência da Computação: Funções hash, checksums, geração de números aleatórios
- Teoria dos Números: Testes de primalidade, algoritmos de fatoração
- Teoria da Codificação: Códigos de detecção e correção de erros
- Teoria Musical: Técnica de doze tons e classe de altura
- Cálculos de Calendário: Algoritmos do dia da semana
Perguntas Frequentes
Ambas as respostas são matematicamente corretas no sentido de que 2 e -3 diferem em 5 (o módulo), então representam a mesma classe de equivalência módulo 5. A convenção desta calculadora — e da matemática, computação e criptografia — é retornar o resto não negativo: o menor valor r tal que 0 ≤ r < m. Por isso 17 mod 5 dá 2 (porque 17 = 3 × 5 + 2), e -3 mod 5 também dá 2 (porque -3 = -1 × 5 + 2). É o módulo "euclidiano" ou "floor". Algumas linguagens (C, Java, JavaScript com %) usam módulo "truncado" que preserva o sinal do dividendo — em JavaScript, -3 % 5 retorna -3, não 2. Esta calculadora segue a convenção matemática porque ela é inequívoca e bate com qualquer livro-texto de teoria dos números e criptografia.
O inverso a⁻¹ mod m existe se e somente se mdc(a, m) = 1, ou seja, a e m não compartilham fator comum além de 1 — são coprimos. Exemplo: 3 mod 7 — mdc(3, 7) = 1, o inverso existe, e é 5 (porque 3 × 5 = 15 ≡ 1 mod 7). Exemplo: 6 mod 9 — mdc(6, 9) = 3, não existe inverso. Calcula-se usando o Algoritmo de Euclides Estendido, que produz mdc e inverso simultaneamente. A condição é crítica para RSA: o expoente de criptografia e e a função totiente φ(n) precisam ser coprimos, do contrário a chave privada não pode ser derivada. Esta calculadora informa "sem inverso" quando mdc > 1, em vez de dar silenciosamente uma resposta errada.
A criptografia RSA calcula c = m^e mod n, onde m é a mensagem, e é o expoente público (geralmente 65537), e n é o módulo público (em geral 2048 ou 4096 bits). Para n de 2048 bits, os valores podem ter centenas de dígitos. Calcular m^e primeiro e depois reduzir módulo n é impossível — o valor intermediário seria astronomicamente grande, muito mais do que qualquer computador consegue guardar. O algoritmo de quadrado-e-multiplica (também chamado exponenciação modular por quadrados repetidos) intercala elevações ao quadrado com redução módulo n, mantendo todos os intermediários menores que n. Para e = 65537 = 2^16 + 1, são necessárias 17 multiplicações modulares em vez de 65536 — aumento de velocidade na ordem de 4000×. Bibliotecas criptográficas sérias ainda incluem implementação em tempo constante para evitar ataques de canal lateral por tempo.
Não é a mesma coisa. O módulo matemático (a mod m) sempre retorna não negativo para m positivo: 0 ≤ resultado < m. O operador % varia por linguagem. C, C++, Java, JavaScript, Go: módulo truncado — o sinal segue o dividendo, então -7 % 3 retorna -1. Python: módulo floor — o sinal segue o divisor, então -7 % 3 retorna 2. Convenção matemática: -7 mod 3 = 2 (igual a Python). Ao portar código de criptografia ou teoria dos números de uma fonte matemática para JavaScript ou C, é preciso tratar o caso negativo: ((a % m) + m) % m dá o resultado matemático correto independentemente do sinal. Esta calculadora usa a convenção matemática, então os resultados batem com livros de teoria dos números sem importar a linguagem que você venha.
Porque o mostrador do relógio é o exemplo mais familiar. Um relógio de 12 horas funciona em módulo 12: 11 + 4 horas = 3, porque 11 + 4 = 15 e 15 mod 12 = 3. O tempo "dá a volta" pelo módulo do mesmo jeito que a aritmética modular. Relógio militar de 24h funciona em módulo 24, dias da semana em módulo 7 e ângulos em módulo 360° (ou 2π radianos). Sempre que existe grandeza cíclica — ângulos, dias, horas, classes de altura musical, valores de matiz de cor — a aritmética modular é o framework natural. A metáfora do relógio foi popularizada nas Disquisitiones Arithmeticae de Gauss (1801), obra fundadora da aritmética modular, onde ele introduziu a notação ≡ de congruência que ainda usamos.
Zero, nunca — divisão por zero é indefinida, a mod 0 não faz sentido. Esta calculadora rejeita módulo = 0 com erro. Módulo negativo é matematicamente permitido mas convencionalmente tratado como positivo (-5 equivale a +5 como módulo, as classes de equivalência são as mesmas). Para deixar os resultados previsíveis, esta calculadora exige módulo inteiro positivo ≥ 1. Observação: mod 1 é um caso especial em que todo inteiro é congruente a 0 — útil em provas mas trivial em cálculos. A maioria dos usos reais tem m ≥ 2.
O Pequeno Teorema de Fermat diz: se p é primo e a é um inteiro não divisível por p, então a^(p-1) ≡ 1 (mod p). É a base de várias coisas: (1) Teste de primalidade — se você achar algum a com mdc(a, n) = 1 mas a^(n-1) ≢ 1 mod n, então n é composto, sem dúvida. Miller-Rabin é uma versão refinada desse teste. (2) Geração de chaves RSA — o teorema é o que faz a decifragem RSA funcionar; a matemática depende de a^(φ(n)) ≡ 1 mod n, que generaliza Fermat via o teorema de Euler para n não primo. (3) Criptografia de logaritmo discreto — muitos protocolos dependem de expoentes reduzindo módulo p-1 quando a base está no grupo multiplicativo mod p. Teste: 2^6 mod 7 = 64 mod 7 = 1 (com 7 primo e mdc(2,7)=1).
Sim para entradas de tamanho normal (até o limite de inteiro seguro do JavaScript, 2^53 ≈ 9 × 10^15), mas não para tamanhos completos de chave criptográfica (2048+ bits ≈ 600+ dígitos decimais). A calculadora roda no seu navegador usando números JavaScript comuns, que perdem precisão acima de 2^53. Para cálculos criptográficos reais, bibliotecas usam inteiros de precisão arbitrária via BigInt (presente nos navegadores modernos) — abra o console do navegador e tente (3n ** 5n) % 7n para aritmética BigInt. Para uso cotidiano — exercício de teoria dos números, análise de função hash, cálculo de calendário, demonstração de RSA com chave pequena — a precisão desta calculadora basta e sobra. Para criptografia real, use uma biblioteca auditada como OpenSSL ou libsodium; não escreva a sua.