Calculadora paso bebé-paso gigante de logaritmos discretos
2 elevado a 9 deja resto 5 al dividir entre 13, así que el logaritmo discreto de 5 en base 2 módulo 13 es 9. Indique una base, un objetivo y un módulo, primo o compuesto, para hallar el exponente. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- G
- 2
- H
- 5
- N
- 13
- X
- 9
- Ecuación
- 2^9 ≡ 5 (mod 13)
Esta calculadora de paso bebé-paso gigante halla un exponente no negativo x para el que g elevado a x es congruente con h módulo n. A diferencia de los solucionadores limitados a campos primos, también admite módulos compuestos y bases no coprimas mediante una reducción previa. El resultado incluye residuos normalizados y una ecuación legible para verificarlo. Si el objetivo no es alcanzable desde el generador indicado, la solicitud devuelve un error claro en vez de un resultado vacío ambiguo.
Describa con precisión la ecuación modular
Indique tres enteros: g es el generador o la base, h es el objetivo y n es el módulo. La calculadora busca un x no negativo que satisfaga g^x congruente con h módulo n. Se aceptan bases y objetivos negativos, que se normalizan al intervalo estándar entre cero y n menos uno.
La respuesta repite esos valores normalizados para que usted pueda ver la ecuación exacta incluso si los datos originales estaban fuera del intervalo. El módulo debe ser al menos dos y puede ser primo o compuesto, dentro del límite publicado. Primero se considera el exponente cero, conforme a la convención habitual de que g^0 vale uno módulo n.
Por ello, un objetivo congruente con uno produce x igual a cero. Una respuesta correcta contiene x, los operandos normalizados, el nombre del método y una ecuación de comprobación fácil de leer y utilizar en pruebas automatizadas.
Comprenda los pasos pequeños y gigantes
Una búsqueda directa prueba exponentes consecutivos y puede necesitar una cantidad de multiplicaciones modulares proporcional al módulo. El método paso bebé-paso gigante intercambia memoria por velocidad. Escoge una anchura cercana a la raíz cuadrada del intervalo, registra potencias pequeñas consecutivas de la base como pasos bebé y avanza después por el objetivo con saltos de esa anchura.
La coincidencia de un residuo combina un índice gigante con uno pequeño y recupera el exponente. Tanto la tabla como el número de saltos son del orden de la raíz cuadrada de n. Esta implementación es determinista: no muestrea candidatos, no depende de semillas aleatorias, no consulta servicios y no utiliza el reloj.
Para entradas no coprimas aplica primero la variante extendida. Elimina uno a uno los divisores comunes mientras conserva un desplazamiento del exponente y un multiplicador. Si un divisor vuelve inalcanzable el objetivo, rechaza la ecuación de inmediato.
Cuando la base reducida ya es invertible, comienza la búsqueda en tabla y se suma el desplazamiento final. Antes de devolverlo, el exponente se verifica de forma independiente mediante exponenciación modular.
Límites y casos sin solución
Un logaritmo discreto no siempre existe. Las potencias de g pueden recorrer solo una parte de los residuos módulo n y dejar h fuera de la sucesión generada. Este comportamiento es deliberado y resulta útil en procesos donde esa ausencia debe detener el paso siguiente; usted puede tratar el código estándar sin examinar campos nulos.
Los enteros mal formados, los campos ausentes y un módulo fuera de los límites producen la misma categoría de error con mensajes más específicos. El coste computacional crece con la raíz cuadrada del módulo reducido porque el algoritmo crea una tabla en memoria; el límite evita asignaciones desmedidas y acota la ejecución. Emplee parámetros moderados para enseñanza, vectores de prueba, rompecabezas y diagnóstico.
No sirve para recuperar secretos de grupos criptográficos reales, cuyos tamaños superan deliberadamente este límite.
Qué puede hacer con ella
Verificar ejercicios de aritmética modular
Compruebe una ecuación académica y obtenga el exponente junto con una congruencia legible que puede sustituir en el problema.
Crear vectores de prueba deterministas
Genere respuestas conocidas para código de exponenciación modular, incluidos casos con módulos compuestos y factores compartidos.
Preguntas frecuentes
¿El módulo debe ser primo?
No. La reducción extendida admite módulos primos y compuestos, incluidos muchos casos donde g y n comparten un factor.
¿Qué exponente se devuelve?
El solucionador busca exponentes no negativos, considera explícitamente el cero y devuelve una solución verificada mediante BSGS.
¿Por qué hay un límite para el módulo?
Paso bebé-paso gigante consume memoria y tiempo proporcionales a la raíz cuadrada. El límite mantiene predecible la ejecución.
¿Qué pasa si no existe ningún exponente?
Las potencias de la base pueden alcanzar solo algunos restos módulo n, de modo que el objetivo puede quedar fuera. En ese caso recibe un aviso claro de que no hay exponente, no una respuesta vacía o engañosa.
¿Por qué es más rápido que probar exponentes uno a uno?
Una búsqueda directa puede necesitar tantos pasos como indica el módulo. Este método guarda una tabla de potencias pequeñas y avanza después a grandes saltos, así que ambas partes cuestan del orden de la raíz cuadrada de n.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
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)Ejemplo de solicitud
{
"g": 2,
"h": 5,
"n": 13
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.baby_step_giant_step",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_n | 1000000000000 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
Describa con precisión la ecuación modular
Los datos pueden enviarse como enteros JSON o cadenas de dígitos, algo práctico cuando un lenguaje cliente no representa cómodamente un valor.
Gestione límites, errores y uso de la API
En ese caso, esta capacidad genera un error invalid_input cuyo mensaje indica que no existe exponente. El navegador utiliza el mismo solucionador puro que la API. Cada elemento automatizado cuesta $0.002, sin aritmética dependiente de la red ni resultados aleatorios.
Casos de integración
Detectar objetivos inalcanzables
Use el error estándar invalid_input para detener un proceso cuando el objetivo no pertenece a la sucesión de potencias generada por g.
Preguntas técnicas
¿Qué ocurre si no existe logaritmo discreto?
La llamada falla con invalid_input y un mensaje que señala que no existe exponente para los valores proporcionados.
¿Cuánto cuesta una llamada a la API?
Cada elemento cuesta $0.002. El ejecutor del navegador usa la misma biblioteca pura para cálculos interactivos.