Calculadora passo de bebê-passo de gigante para logaritmos
2 elevado a 9 deixa resto 5 na divisão por 13, então o logaritmo discreto de 5 na base 2 módulo 13 é 9. Informe uma base, um alvo e um módulo, primo ou composto, para achar o expoente. 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
- G
- 2
- H
- 5
- N
- 13
- X
- 9
- Equação
- 2^9 ≡ 5 (mod 13)
Esta calculadora de passo de bebê-passo de gigante encontra um expoente não negativo x para o qual g elevado a x é congruente a h módulo n. Diferentemente de soluções restritas a corpos primos, ela também aceita módulos compostos e bases não coprimas por meio de uma redução inicial. O resultado inclui resíduos normalizados e uma equação legível para conferência. Se o alvo não puder ser alcançado pelo gerador informado, a solicitação retorna um erro claro, e não um resultado vazio ambíguo.
Descreva a equação modular com precisão
Informe três inteiros: g é o gerador ou a base, h é o alvo e n é o módulo. A calculadora procura um x não negativo que satisfaça g^x congruente a h módulo n. Bases e alvos negativos são aceitos e normalizados no intervalo padrão de zero a n menos um.
A resposta repete esses valores normalizados para que você veja exatamente qual equação foi resolvida, mesmo quando a entrada original estava fora do intervalo. O módulo deve ser no mínimo dois e pode ser primo ou composto, respeitando o limite publicado. O expoente zero é verificado primeiro, seguindo a convenção usual de que g^0 vale um módulo n.
Assim, um alvo congruente a um produz x igual a zero imediatamente. Uma resposta bem-sucedida contém x, os operandos normalizados, o nome do método e uma equação de verificação clara, adequada tanto para inspeção manual quanto para testes automatizados.
Entenda os passos de bebê e de gigante
Uma busca direta testa expoentes consecutivos e pode exigir uma quantidade de multiplicações modulares proporcional ao módulo. O passo de bebê-passo de gigante troca memória por velocidade. Ele escolhe uma largura próxima da raiz quadrada do intervalo, armazena potências pequenas consecutivas da base como passos de bebê e percorre o alvo em saltos dessa largura.
Uma coincidência de resíduos combina os índices dos dois passos e recupera o expoente. Tanto a tabela quanto o número de saltos ficam na ordem da raiz quadrada de n. Esta implementação é determinística: não sorteia candidatos, não depende de sementes aleatórias, não consulta serviços e não usa o relógio.
Em entradas não coprimas, aplica primeiro a forma estendida. Divisores comuns são removidos um a um, enquanto um deslocamento do expoente e um multiplicador são preservados. Se um divisor tornar o alvo inalcançável, a equação é rejeitada de imediato.
Quando a base reduzida se torna invertível, começa a busca na tabela, e o deslocamento é somado. Antes da resposta, o candidato é conferido por exponenciação modular independente.
Limites e casos sem solução
Um logaritmo discreto nem sempre existe. As potências de g podem visitar apenas parte dos resíduos módulo n, deixando h fora da sequência gerada. Esse comportamento é intencional e ajuda em fluxos nos quais a ausência da solução deve interromper a próxima etapa; você pode tratar o código padrão sem procurar campos nulos.
Inteiros malformados, campos ausentes e módulos fora dos limites geram a mesma categoria de erro com mensagens mais específicas. O custo computacional cresce com a raiz quadrada do módulo reduzido, pois o algoritmo monta uma tabela na memória; o limite evita alocações inesperadas e mantém a execução controlada. Use parâmetros modestos em ensino, vetores de teste, desafios e diagnóstico.
Esta ferramenta não recupera segredos de grupos criptográficos de produção, cujos tamanhos superam deliberadamente esse limite.
Casos de uso
Verificar exercícios de aritmética modular
Confira uma equação didática e receba o expoente com uma congruência legível que pode ser substituída no problema.
Criar vetores de teste determinísticos
Gere respostas conhecidas para código de exponenciação modular, inclusive com módulos compostos e fatores comuns.
Perguntas frequentes
O módulo precisa ser primo?
Não. A redução estendida aceita módulos primos e compostos, inclusive muitos casos em que g e n têm um fator comum.
Qual expoente é retornado?
O solucionador pesquisa expoentes não negativos, trata o zero explicitamente e retorna uma solução verificada pelo BSGS.
Por que existe um limite para o módulo?
O algoritmo usa memória e tempo de raiz quadrada. O limite mantém a tabela hash e a execução previsíveis.
O que acontece se não existir nenhum expoente?
As potências da base podem alcançar só alguns restos módulo n, então o alvo pode ficar de fora. Nesse caso você recebe um aviso claro de que não há expoente, e não uma resposta vazia ou enganosa.
Por que é mais rápido do que testar expoentes um por um?
Uma busca direta pode exigir tantos passos quanto o tamanho do módulo. Este método guarda uma tabela de potências pequenas e depois avança em saltos grandes, então as duas partes custam cerca da raiz quadrada de n.
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/numth/baby-step-giant-step \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"g":2,"h":5,"n":13}'const res = await fetch("https://api.kit.forhosting.com/numth/baby-step-giant-step", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"g": 2,
"h": 5,
"n": 13
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/baby-step-giant-step",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"g": 2,
"h": 5,
"n": 13
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/baby-step-giant-step", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"g":2,"h":5,"n":13}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"g":2,"h":5,"n":13}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/baby-step-giant-step", 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
{
"g": 2,
"h": 5,
"n": 13
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.baby_step_giant_step",
"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.
Limites
max_n | 1000000000000 |
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
Descreva a equação modular com precisão
Os valores podem ser inteiros JSON ou sequências de dígitos, recurso útil quando a linguagem cliente não representa um número de forma conveniente.
Trate limites, falhas e uso da API
Nesse caso, esta capacidade gera um erro invalid_input cuja mensagem informa que não existe expoente. O navegador executa o mesmo solucionador puro da API. Chamadas automatizadas custam US$ 0,002 por item, sem aritmética dependente da rede ou resultados não determinísticos.
Casos de integração
Detectar alvos inalcançáveis
Use a falha padrão invalid_input para interromper um fluxo quando o alvo não pertence à sequência de potências de g.
Perguntas técnicas
O que ocorre quando não há logaritmo discreto?
A chamada falha com invalid_input e uma mensagem informando que não existe expoente para os valores fornecidos.
Quanto custa uma chamada de API?
Cada item custa US$ 0,002. O executor do navegador usa a mesma biblioteca pura em cálculos interativos.