Exponenciação modular rápida
Obtenha o resto exato de uma potência enorme sem estouro: 2 elevado a 10 módulo 1000 é 24, e 3 elevado a 5 módulo 13 é 9. A base, o expoente e o módulo podem ter até 2048 dígitos cada. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Exemplo resolvido
- Base
- 2
- Expoente
- 10
- Módulo
- 1000
- Resultado
- 24
A exponenciação modular rápida responde a uma pergunta precisa: qual é o resto não negativo exato quando uma base inteira é elevada a um expoente inteiro e reduzida módulo m? Esse resíduo sustenta demos de aula no estilo RSA, esboços de troca Diffie–Hellman, problemas de maratonas de programação e qualquer script de produção que precise potenciar inteiros grandes sem estourar tipos de largura fixa nem perder precisão além de 2^53.
O que a exponenciação modular rápida calcula
Dados inteiros base, exponent e módulo m, a exponenciação modular devolve o único resto r no intervalo fechado de zero a m menos um tal que a base elevada ao expoente é congruente a r módulo m. Em símbolos, r ≡ base^exponent (mod m). Uma abordagem ingênua multiplica a base por si mesma exponent vezes e só então reduz, o que infla valores intermediários muito além da vírgula flutuante ou de inteiros de largura fixa e falha em silêncio quando a precisão se perde.
A exponenciação modular rápida reduz após cada multiplicação e eleva ao quadrado a base corrente enquanto percorre os bits do expoente do menos ao mais significativo, de modo que o trabalho total escala com o comprimento em bits do expoente e não com sua magnitude decimal. Quando m vale um, todo inteiro é congruente a zero, então o resultado é sempre zero.
Quando o expoente é zero, o resultado é um para qualquer base desde que m seja maior que um, seguindo a convenção do produto vazio da teoria dos números e das bibliotecas de programação. Bases negativas são primeiro reduzidas ao sistema de resíduos não negativos módulo m para que a cadeia de multiplicações não misture restos com sinal. Expoentes negativos são rejeitados porque exigem inversos modulares que podem não existir quando base e m não são coprimos, e esse passo de inverso fica fora do escopo desta calculadora.
Limites, desempenho e onde desenvolvedores usam
A exponenciação modular binária realiza um número constante de multiplicações modulares por bit do expoente, de modo que dobrar o expoente aproximadamente dobra o trabalho, enquanto um módulo maior encarece cada produto com o comprimento em dígitos. Professores a usam para verificar cálculos manuais de a^b mod m antes de os alunos entregarem provas.
Desenvolvedores a integram em testes de propriedades que afirmam que protocolos permanecem em classes de resíduos, em jogos ou rankings que dobram contadores grandes módulo um primo, e em pipelines de scripting que não devem reimplementar quadrado e multiplicação em cada linguagem.
Casos de uso
Verificar respostas de maratona e deveres a^b mod m
Alunos e monitores podem checar potências modulares sem multiplicar à mão intermediários enormes nem confiar em uma calculadora que perde precisão em silêncio além de 2^53.
Semear demos de cripto e testes unitários de protocolo
Scripts que precisam de um passo determinístico base^exp mod m para RSA de brinquedo, Diffie–Hellman ou asserções de classe de resíduos podem chamar isto em vez de levar a própria potenciação BigInt.
Dobrar contadores grandes em um intervalo de resíduos fixo
Jogos, sistemas de ranking e ajudas de sharding que elevam um inteiro e depois reduzem módulo m obtêm um resto exato sem surpresas de arredondamento em ponto flutuante.
Perguntas frequentes
O que é exponenciação modular?
É elevar a base a um expoente e tomar o resto módulo m, escrito base^exponent mod m. Esta calculadora devolve esse resto não negativo como result.
Por que um expoente negativo é rejeitado?
Expoentes negativos significam potências recíprocas e exigem inversos modulares, que podem não existir quando base e m não são coprimos.
Como funciona a calculadora de exponenciação modular rápida?
Usa quadrado e multiplicação binários sobre BigInt: para cada bit do expoente eleva ao quadrado a base corrente módulo m e multiplica no resultado quando o bit está ativo.
A calculadora de exponenciação modular rápida é grátis?
A ferramenta do navegador é grátis e roda localmente.
O que acontece se o módulo for 1 ou o expoente for 0?
Com módulo 1 todo número deixa resto 0, então o resultado é sempre 0. Com expoente 0 o resultado é 1 para qualquer base, desde que o módulo seja maior que 1: 7 elevado a 0 módulo 5 dá 1.
Ferramentas relacionadas
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/dev/modular-exponentiation \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"base":"2","exponent":"10","modulus":"1000"}'const res = await fetch("https://api.kit.forhosting.com/dev/modular-exponentiation", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"base": "2",
"exponent": "10",
"modulus": "1000"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/modular-exponentiation",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"base": "2",
"exponent": "10",
"modulus": "1000"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/modular-exponentiation", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"base":"2","exponent":"10","modulus":"1000"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"base":"2","exponent":"10","modulus":"1000"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/modular-exponentiation", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"base": "2",
"exponent": "10",
"modulus": "1000"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.modular_exponentiation",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
Notas técnicas
Esta calculadora de exponenciação modular rápida executa o algoritmo binário de quadrado e multiplicação sobre BigInt para que os produtos intermediários sejam reduzidos a cada passo, a resposta seja determinística, e você possa testar o mesmo núcleo puro de graça no navegador antes de chamar a API, que só fatura tarefas bem-sucedidas.
O que a exponenciação modular rápida calcula
O módulo deve ser pelo menos um; módulos nulos ou negativos não definem um resto não negativo padrão e devolvem invalid_input em vez de inventar uma resposta.
Como chamar a API e ler o resultado
Envie um corpo JSON com três campos obrigatórios: base, exponent e modulus. Cada um pode ser uma string de inteiro decimal ou um número JSON; a forma string é preferida para valores maiores que o intervalo de inteiros seguros do JavaScript, porque acima desse limiar nem todo inteiro é representado com exatidão. Aceitam-se os aliases a para base, exp ou e ou power para exponent, e m ou mod para modulus, para que formulários e clientes escritos à mão compartilhem um único contrato sem renomear chaves. Em caso de sucesso, a resposta ecoa base, exponent e modulus como strings decimais normalizadas e acrescenta result como o resto não negativo de base^exponent mod modulus. Verificações clássicas que você pode rodar na hora: base 2, exponent 10, modulus 1000 produz result 24; base 3, exponent 5, modulus 13 produz 9; base 7, exponent 0, modulus 5 produz 1. Validação falha—campos ausentes, não inteiros, frações, módulo menor que um, expoente negativo ou valor maior que o limite de dígitos publicado—devolve invalid_input e nunca é cobrada do saldo pré-pago. O preço é um valor fixo US$ 0,002 por requisição bem-sucedida na unidade item.
Limites, desempenho e onde desenvolvedores usam
Esta capacidade limita base, exponent e modulus a 2048 dígitos decimais—o bastante para maratonas, deveres e muitas demos em escala criptográfica—e ainda pequena o suficiente para o BigInt puro do Worker permanecer interativo sem uma pilha multiprecisão pesada nem um contêiner. Se você precisa de módulos com milhões de dígitos, decomposições pelo teorema chinês do resto ou primitivas criptográficas de tempo constante resistentes a canais laterais, é necessária uma biblioteca criptográfica dedicada; esta ferramenta parse leve é de propósito a calculadora e o passo de API compartilhados para potências modulares exatas em fluxos de desenvolvimento. Combine com ferramentas de fatoração ou inverso modular quando o fluxo precisar do kit modular completo; este endpoint responde só à pergunta de potenciar e reduzir para que a intenção de busca fique clara e a resposta seja mínima e previsível.
Perguntas técnicas
O que acontece se o módulo for menor que 1?
O módulo deve ser pelo menos 1. Módulos nulos ou negativos não definem o resto não negativo padrão usado aqui e devolvem invalid_input.