Content deleted Content added
No edit summary |
fix link in references |
||
(6 intermediate revisions by 4 users not shown) | |||
Line 2:
'''Pollard's rho algorithm for logarithms''' is an algorithm introduced by [[John Pollard (mathematician)|John Pollard]] in 1978 to solve the [[discrete logarithm]] problem, analogous to [[Pollard's rho algorithm]] to solve the [[integer factorization]] problem.
The goal is to compute <math>\gamma</math> such that <math>\alpha ^ \gamma = \beta</math>, where <math>\beta</math> belongs to a [[cyclic group]] <math>G</math> generated by <math>\alpha</math>. The algorithm computes [[integer]]s <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>. If the underlying [[group (mathematics)|group]] is cyclic of [[order of a group|order]] <math>n</math>, by substituting <math> \beta </math> as <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 (mathematics)|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 of approximate length <math>\sqrt{\frac{\pi n}{8}}</math> after <math>\sqrt{\frac{\pi n}{8}}</math> steps. One way to define such a function is to use the following rules:
==Algorithm==
Let <math>G</math> be a [[cyclic group]] of order <math>
:<math>
Line 21:
:<math>\begin{align}
g(x,
\end{cases}
\\
h(x,
\end{cases}
\end{align}</math>
Line 38:
'''output:''' An integer ''x'' such that ''a<sup>x</sup>'' = ''b'', or failure
Initialise ''i'' ← 0, ''a''<sub>0</sub> ← 0, ''b''<sub>0</sub> ← 0, ''x''<sub>0</sub> ← 1 ∈ ''G''
'''loop'''
''
''a<sub>i</sub>'' ← ''g''(''x''<sub>''i''-1</sub>, ''a''<sub>''i''-1</sub>), ▼
''b<sub>i</sub>'' ← ''h''(''x''<sub>''i''-1</sub>, ''b''<sub>''i''-1</sub>)▼
''x
''a
''b
''x'
'''if''' r = 0 '''return failure'''▼
''b'
''r'' ← ''b<sub>i</sub>'' − ''b''<sub>2''i''</sub>
'''return''' ''r''<sup><span class="nowrap" style="padding-left:0.1em">−1</span></sup>(''a''<sub>2''i''</sub> − ''a<sub>i</sub>'') mod ''n''
==Example==
Line 117 ⟶ 116:
==References==
{{Reflist}}
*{{cite journal |first=J. M. |last=Pollard |title=Monte Carlo methods for index computation (mod ''p'') |journal=[[Mathematics of Computation]] |volume=32 |year=1978 |issue=143 |pages=918–924 |doi= 10.2307/2006496 |jstor=2006496 }}
*{{cite book |
{{Number-theoretic algorithms}}
|