Ответ 6 + 10i для любого целого числа i.
Простой способ получить решения для малых модулей - это перебирать все значения x. Вам нужно только проверить между 0 и 10 (= 11 - 1), чтобы найти первое решение, если какое-либо решение существует.
x = 0
while x < 50:
if 9 == 2**x % 11:
print x
x += 1
Выход:
6
16
26
36
46
Очевидно, что это займет много времени, если модуль большой.
Более подробная информация находится на странице Discrete Logarithm . Примечание:
Нет эффективного классического алгоритма для
вычисление общих дискретных логарифмов
logbg известен. Наивный алгоритм
поднять б до высших и высших сил
k, пока не будет найден желаемый g; этот
иногда называют пробным
умножение. Этот алгоритм
требует времени выполнения линейного в
размер группы G и, таким образом,
экспоненциальное количество цифр в
размер группы.
Если бы было легко инвертировать модульное возведение в степень, это не было бы хорошим криптографическим примитивом.