Function EXPT-MOD

Syntax:

expt-mod n exponent divisor => result

Arguments and Values:

n---a number.

exponent---a number.

divisor---a number.

result---a number.

Description:

expt-mod returns n raised to the exponent power, modulo divisor. `(expt-mod n exponent divisor)` is equivalent to `(mod (expt n exponent) divisor)`.

Exceptional situations:

The exceptional situations are the same as those for `(mod (expt n exponent) divisor)`.

Notes:

One might wonder why we shouldn't simply write `(mod (expt n exponent) divisor)`. This function exists because the naïve way of evaluating `(mod (expt n exponent) divisor)` produces a gigantic intermediate result, which kills performance in applications which use this operation heavily. The operation can be done much more efficiently. Usually the compiler does this optimization automatically, producing very fast code. However, we can't depend on this behavior if we want to produce code that is guaranteed not to perform abysmally on some Lisp implementations.

Therefore cl-utilities provides a standard interface to this composite operation which uses mediocre code by default. Specific implementations can usually do much better, but some do much worse. We can get the best of both by simply using the same interface and doing read-time conditionalization within cl-utilities to get better performance on compilers like SBCL and Allegro CL which optimize this operation.

Manual Index