Может ли этот сценарий иметь лучшую производительность при использовании модульного возведения в степень? - PullRequest
0 голосов
/ 19 января 2020
def f(a, b, c):
    return ((a ** b)-1) // c % b

Может ли этот скрипт каким-то образом быть быстрее? (Я искал что-то с модульным возведением в степень):

pow(a, b, c) == a ** b % c

, но вышеприведенный скрипт не выглядит таким уж улучшенным. Кто-нибудь знает способ ускорить вышеуказанный скрипт? Заранее спасибо.

Редактировать:

Второй скрипт совсем не похож на первый, он просто предназначен для того, чтобы показать, какую оптимизацию я имел в виду.

Редактировать:

Я не поместил точное уравнение, потому что я хотел общее решение для случая, особенности, когда a = 4 и c = 3. Это облегчает?

Редактировать:

Я получил просьбу прояснить, хочу ли я сначала вычесть или если сначала возведу возведение в степень, сначала я хочу возвести возведение в степень, которое я пояснил, добавив скобки.

1 Ответ

1 голос
/ 20 января 2020

Обратите внимание, что a**b//c%d == a**b%(c*d)//c%d верно для любых натуральных чисел. Это верно, потому что существует положительное целое число k, такое, что a**b == k*c*d + a**b%(c*d) удерживается, и на результат операции //c%d над правой стороной не влияет ни один k. Согласно этому факту, a**b//c%d можно рассчитать с помощью команды

pow(a,b,c*d)//c%d
...