Pollard's rho algorithm for logarithms: Difference between revisions

Content deleted Content added
edited intro: partition G into G_0, G_1 and G_2 will never be into subgroups!
Line 3:
The goal is to compute <math>\gamma</math> such that <math>\alpha ^ \gamma = \beta</math>, where <math>\beta</math> belongs to a [[Group (mathematics)|group]] <math>G</math> generated by <math>\alpha</math>. The algorithm computes integers <math>a</math>, <math>b</math>, <math>A</math>, and <math>B</math> such that <math>\alpha^a \beta^b = \alpha^A \beta^B</math>. Assuming, for simplicity, that the underlying group is cyclic of order <math>n</math>, we can calculate <math>\gamma</math> as a solution of the equation <math>(B-b)\gamma = (a-A) \pmod{n}</math>.
 
To find the needed <math>a</math>, <math>b</math>, <math>A</math>, and <math>B</math> the algorithm uses [[Floyd's cycle-finding algorithm]] to find a cycle in the sequence <math>x_i = \alpha^{a_i} \beta^{b_i}</math>, where the function <math>f: x_i \mapsto x_{i+1}</math> is assumed to be random-looking and thus is likely to enter into a loop after approximately <math>\sqrt{\frac{\pi n}{2}}</math> steps. One way to define such a function is to use the following rules: Divide <math>G</math> into three subsets (not necessarily [[subgroup]]s) of approximately equal size: <math>G_0S_0</math>, <math>G_1S_1</math>, and <math>G_2S_2</math>. If <math>x_i</math> is in <math>G_0S_0</math> then double both <math>a</math> and <math>b</math>; if <math>x_i \in G_1S_1</math> then increment <math>a</math>, if <math>x_i \in G_2S_2</math> then increment <math>b</math>.
 
==Algorithm==