Задать вопрос
@MAGistr_MTM
Учусь программировать

Оптимальный алгоритм возведения в степень по модулю. Как улучшить?

Доброго времени суток.
Есть задание:
Вычислить последние 12 знаков следующего выражения(** - возведение в степень):A * B**C + D
Где, 1 <= A, B, C, D <= 10**9
Вот моя реализация на Python:
n = int(input()) #number of test cases
module = 10 ** 12

def pow_l(x, n):
    result = 1
    while n != 0:
        if n % 2 != 0:
            result *= x
            result %= module
            n -= 1
        else:
            x *= x
            x %= module
            n /= 2
    return result

for i in range(n):
    a, b, c, d = (int(num) for num in input().split())
    prod = (a * pow_l(b, c) + d) % module
    print (str(prod).zfill(12))

Но, увы, этот алгоритм слишком медленный. Что можете посоветовать?
Буду очень благодарен за помощь.
  • Вопрос задан
  • 9037 просмотров
Подписаться 3 Оценить Комментировать
Ответ пользователя Виталий К ответам на вопрос (3)
В Python уже есть функция для возведения в степень по модулю: pow(b, c, module). Вряд ли встроенными средствами языка вы напишите более быструю функцию.
Ответ написан