'''Output''' Integer ''x'', such that ''e =≡ g<sup>x</sup> (mod p)''.
#Use [[Euler's phitotient function]] to determine the prime factorization of the order of the group : <br><center><math>\phivarphi(p)=\equiv p_0\cdot p_1 \cdot \ldots \cdot p_n</math></center>
#From the remainder theorem we know that ''x = a<sub>1</sub> p<sub>1</sub> + b<sub>1</sub>''. We now find the value of ''b<sub>1</sub>'' for which the following equation holds using a fast algorithm such as [[Baby-step giant-step]] :<br> <center><math>
</math> (using [[Euler's theorem]])</center><br>Note that if <math>g^{\phivarphi(p)/p_1} =\equiv 1 \pmod{p}</math> then the order of ''g'' is less than øφ(''p'') and <math>e^{\phivarphi(p)/p_1} \mod p</math> must be 1 for a solution to exist. In this case there will be more than one solution for ''x'' less than øφ(''p''), but since we are not looking for the whole set, we can require that ''b''<sub>1</sub>=0.<br><br>The same operation is now performed for ''p<sub>2</sub>'' up to ''p<sub>n</sub>''.<br><br>A minor modification is needed where a prime number is repeated. Suppose we are seeing ''p<sub>i</sub>'' for the ''k+1''-th time. Then we already know ''c<sub>i</sub>'' in the equation ''x = a<sub>i</sub> p<sub>i</sub><sup>k+1</sup> + b<sub>i</sub> p<sub>i</sub><sup>k</sup>+c<sub>i</sub>'', and we find ''b<sub>i</sub>'' the same way as before.
#We end up with enough simultaneous congruences so that ''x'' can be solved using the [[Chinese remainder theorem]].