Python pow() и модуль

#python #pow

Вопрос:

Функция pow() в python3 предоставляет значения для показателей.

 >>>pow(2,3)
8
 

Python3 поддерживает отрицательные показатели, которые могут быть представлены с помощью pow(10,-1). Когда я рассчитал pow(4,-1,5), это дало результат 4.

 >>> pow(4, -1, 5)
4
 

Я не мог понять, как было вычислено значение 4, потому что в фоновом режиме оно выполняет
и он не вернул значение 4 в качестве напоминания, когда я рассчитывал вручную.

Когда значение-ve передается в двух значениях, оно выдает желаемый результат в виде ручного метода.

 >>> pow(4, -1)
.25
 

В чем разница при вычислении отрицательного показателя с модулем?

Ответ №1:

Из документации;

Если mod присутствует, а exp отрицателен, база должна быть относительно простой для mod. В этом случае pow(inv_base, -exp, mod) возвращается значение, inv_base обратное base модулю mod.

Ответ №2:

Начиная с python 3.8, pow функция позволяет вычислять модульное обратное. Как упоминалось в других ответах, это происходит, когда вы используете целые числа, имеете отрицательный exp, а база относительно проста для mod. (это имеет место в вашем примере)

Что такое модульная обратная связь?

Давайте начнем с обычных инверсий. Некоторое число Y имеет обратную X величину, такую что Y * X == 1 . Модульные инверсии очень похожи. Для некоторого числа Y и некоторого модуля mod существует обратное X , такое, что ((X * Y) % mod) == 1 . Из вашего примера вы увидите (4 * 4) % 5 , что на самом деле это равно 1 , что делает 4 допустимым модульным обратным для Y = 4 и mod = 5 .

Как вы просто получаете pow(4, -1, 5) == 0.25

Ну, вы могли бы написать это как отдельные шаги (4 ** -1) % 5 , но, как говорится в документации

если mod присутствует, верните базу в power exp по модулю mod (вычисляется более эффективно, чем pow(база, exp) % mod)

Таким образом, вы можете пожертвовать производительностью, используя (4 ** -1) % 5 . К сожалению, это кажется невозможным сделать pow .