Baby-step Giant-step

=Logaritmo Discreto=

Dado $$a$$, $$b$$, $$m$$ resolver:

$$ a^x = b \pmod m $$

Donde $$a$$ y $$m$$ son primos relativos.

Algoritmo
Tenemos la ecuación:

$$ a^x = b \pmod m $$

Mediante el ataque por encuentro a medio camino transformamos la ecuación en:

$$ x = np-q $$

Donde $$n$$ es una constante pre-seleccionada dependiente de $$m$$. Algunas veces $$p$$ es llamado gian step y en contraste $$q$$ baby step

Cualquier $$x \in [0;m)$$ puede ser representado en tal forma que:

$$ p \in [1; \left\lceil \frac{m}{n} \right\rceil],\ \ \ q \in [0;n] $$

luego la ecuación se vuelve:

$$ a^{np-q} = b \pmod m $$

Utilizando el hecho de que $$a$$ y $$m$$ son coprimos tenemos:

$$ a^{np} = b a^q \pmod m $$

Para resolver la ecuacion original tenemos que encontrar los valores adecuados de $$p$$ y $$q$$ es decir tenemos que resolver:

$$ f_1(p) = f_2(q), $$

Este problema se resuelve mediante el metodo encuentro a medio camino

Problemas

 * Discrete Logging UVa - 10225
 * Discrete Logging PKU - 2417
 * Shift Register UVa - 11682
 * Registrador de Deslocamento SPOJ Brasil - 5483 - REGISTRA
 * Clever Y PKU - 3243
 * C Looooops PKU - 2115