## Python maths updates

A quick note on some useful updates made to standard Python maths support. Math.prod does for `*`

what sum does for `+`

. It was added at Python 3.8.

>>> math.prod([3, 4, 5]) 60 >>> math.prod([]) 1

Added in 3.9, math.lcm, returns the least common multiple of its integer arguments. As with math.prod, an empty list of arguments returns 1. Extended in 3.9, the related function math.gcd now accepts an arbitrary list of arguments.

For Euclidean geometry, math.hypot now supports n-dimensional points, and math.dist has been added, again working on any pair of n-dimensional points.

These useful additions and extensions are all in the standard math module (along with several others not mentioned here). Previously you’d have to roll your own or rely on e.g. numpy.

I also wanted to mention a nice extension to the power function; in this case to the builtin pow — math.pow remains as it was. Builtin pow takes an optional third parameter `pow(base, exp[, mod])`

. If `mod`

is specified it must be a non-zero integer, and both `base`

and `exp`

must also be integers. The significant but subtle change made at 3.8 is that `exp`

can now be a negative integer, enabling modular inverse calculations.

Quoting the documentation:

… If

modis present andexpis negative,basemust be relatively prime tomod. In that case,pow(inv_base, -exp, mod)is returned, where inv_base is an inverse to base modulo mod.Here’s an example of computing an inverse for 38 modulo 97:

>>> pow(38, -1, mod=97) 23 >>> 23 * 38 % 97 == 1 True