Pow: примеры (PYTHON)
pow(x: number, y: number, z: number = None): numberОписание функции pow()
Функция pow() в Python предназначена для возведения числа в степень.
Ее основное применение - математические вычисления, где требуется получить результат возведения одного числа (основания) в степень другого числа (показателя). Она также поддерживает операцию по модулю.
Существует два варианта синтаксиса:
pow(base, exp)- возвращаетbaseв степениexp. Возвращаемое значение имеет типint, если оба аргумента целые и результат целочисленный, иначе -float.pow(base, exp, mod)- возвращаетbaseв степениexpпо модулюmod. Все аргументы должны быть целочисленными, аmod- отличным от нуля. Возвращаетint. Этот вариант вычислений более эффективен для больших чисел.
Аргументы:
- base: Основание (число, которое возводится в степень). Может быть целым числом или числом с плавающей точкой.
- exp: Показатель степени. Может быть целым числом (включая отрицательные) или числом с плавающей точкой.
- mod (опционально): Модуль. Должно быть целое число, не равное нулю.
Возвращаемое значение:
- Для
pow(base, exp):base ** exp. - Для
pow(base, exp, mod):base ** exp % mod, но вычисляется более эффективно.
Базовые примеры использования
Стандартное возведение в степень:
print(pow(2, 3))8
Возведение в отрицательную степень:
print(pow(2, -2))0.25
Возведение в дробную степень (извлечение корня):
print(pow(9, 0.5))3.0
Использование с тремя аргументами (возведение в степень по модулю):
print(pow(2, 5, 3)) # (2 ** 5) % 32
Аналогичные функции в Python
Оптор **: Инфиксный оператор для возведения в степень. Более лаконичен для базовых случаев. pow() может быть предпочтительнее при необходимости использовать три аргумента или когда функция передается как объект (например, в map).
print(2 ** 3)8
math.pow(x, y): Функция из модуля math. Всегда возвращает float и не поддерживает операцию по модулю. Преобразует аргументы в float. Полезно, когда требуется именно вещественный результат.
import math
print(math.pow(2, 3))8.0
Реализации в других языках программирования
PHP: Функция pow($base, $exp) или оператор **. Также есть bcpow() для чисел произвольной точности.
echo pow(2, 3); // 88
JavaScript: Метод Math.pow(base, exponent) или оператор **. Нет встроенной поддержки модуля.
console.log(Math.pow(2, 3)); // 88
Java: Math.pow(double a, double b) возвращает double. Для модульной арифметики используется BigInteger.modPow().
System.out.println(Math.pow(2, 3)); // 8.08.0
SQL (MySQL): Функция POW(X, Y) или оператор POWER(X, Y).
SELECT POW(2, 3);8
C#: Math.Pow(double x, double y). Для модульной арифметики используют BigInteger.ModPow().
Console.WriteLine(Math.Pow(2, 3)); // 88
Lua: Оператор ^ или функция math.pow() (устарела в Lua 5.3 в пользу оператора).
print(2 ^ 3) -- 88
Golang: Нет встроенной функции для возведения в степень целых чисел. Для float64 есть math.Pow(x, y float64).
import "math"
fmt.Println(math.Pow(2, 3)) // 88
Kotlin: Методы расширения Double.pow(n: Double), Int.pow(n: Int). Нет встроенной поддержки модуля.
println(2.0.pow(3.0)) // 8.08.0
Отличие Python - наличие встроенной поддержки модуля в третьем аргументе pow() для эффективных вычислений.
Типичные ошибки
Нулевой модуль: При указании третьего аргумента он не должен быть нулем.
print(pow(2, 3, 0))ValueError: pow() 3rd argument cannot be 0
Отрицательное основание и нецелая степень: Комбинация приводит к комплексному числу, что вызывает ошибку, если не используются комплексные типы.
print(pow(-4, 0.5))ValueError: negative number cannot be raised to a fractional power
При работе с комплексными числами ошибки не возникает: print((-4+0j)**0.5).
Большие степени и переполнение: При использовании оператора ** с очень большими целыми числами может потребоваться значительная память. Функция pow с тремя аргументами решает эту проблему для модульной арифметики.
Изменения в последних версиях Python
Начиная с Python 3.8, в функцию pow() разрешили использовать отрицательные значения показателя степени exp при наличии третьего аргумента mod. В этом случае вычисляется модулярное обратное число, что полезно в криптографии.
# Python >=3.8
print(pow(2, -1, 5)) # 3, так как (2 * 3) % 5 == 13
Расширенные примеры применения
Модулярная арифметика в криптографии: Быстрое вычисление больших степеней по модулю - основа многих алгоритмов.
# Проверка по малой теореме Ферма для простого числа 7
base = 3
prime = 7
result = pow(base, prime-1, prime)
print(f"{base}^{prime-1} mod {prime} = {result}")
# Для простого числа результат всегда 1, если base не кратно prime.3^6 mod 7 = 1
Обработка больших чисел: Функция с тремя аргументами эффективна для чисел с тысячами цифр.
large_num = 123456789
large_exp = 100000
modulus = 13
result = pow(large_num, large_exp, modulus)
print(result)4
Побитовое представление и степени двойки:
# Генерация чисел, являющихся степенями двойки
for exp in range(10):
print(f"2^{exp} = {pow(2, exp)}")2^0 = 1 2^1 = 2 2^2 = 4 2^3 = 8 2^4 = 16 2^5 = 32 2^6 = 64 2^7 = 128 2^8 = 256 2^9 = 512
Вычисление корней:
# Кубический корень из 27
print(pow(27, 1/3))3.0
Использование в лямбда-функциях и генераторах:
squares = list(map(lambda x: pow(x, 2), range(5)))
print(squares)[0, 1, 4, 9, 16]
Проверка четности через возведение в степень -1 по модулю 2: Неклассический пример.
for n in range(5):
parity = pow(-1, n, 2) # Эквивалентно n % 2
print(f"n={n}, parity={parity}")n=0, parity=1 n=1, parity=1 n=2, parity=1 n=3, parity=1 n=4, parity=1
Примечание: Этот пример демонстрирует работу, но для проверки четности лучше использовать n % 2.