I am puzzled with the following discrete logarithm problem:

Given positive integers `b, c, m`

where `(b < m) is True`

it is to find a positive integer `e`

such that

```
(b**e % m == c) is True
```

where two stars is exponentiation (e.g. in Ruby, Python or ^ in some other languages) and % is modulo operation. Using general math symbols it looks like:($b^e \equiv c (\mod m)$).

What is the most effective algorithm (with the lowest big-O complexity) to solve it ?

Example: Given b=5; c=8; m=13 this algorithm must find e=7 because 5**7%13 = 8

Thank you in advance!

documented in the literature. Of course,widelythemost effective algorithm may not be known to anyone, but the known algorithms are easy to find details on. The Wikipedia article refers to several algorithms and, if you follow the links, you'll find information on their running time. – Alon Amit Dec 3 '09 at 1:09