Evaluación modular

Genius implementa aritmética modular. Para usarla, simplemente añada «mod <entero>» después de la expresión. Ejemplo: 2^(5!) * 3^(6!) mod 5 Podría ser posible realizar aritmética modular trabajando con enteros y aplicando el módulo al final con el operador %, que simplemente devuelve el resto, pero puede requerir más tiempo o ser imposible cuando se trabaja con valores muy elevados. Por ejemplo 10^(10^10) % 6 puede que no funcione (el exponente es demasiado grande), sin embargo 10^(10^10) mod 6 es instantáneo. La primera expresión primero intenta calcular el entero 10^(10^10) y luego el resto de la división por 6, mientras que la segunda expresión calcula el módulo 6 de todo primero que nada.

The inverses of numbers mod some integer are computed by writing them as rational numbers (as long as the desired inverse exists, of course). Examples:

10^-1 mod 101
1/10 mod 101

Modular evaluation also works with matrices including taking inverses, powers, and dividing. Example:

A = [1,2;3,4]
B = A^-1 mod 5
A*B mod 5

This should yield the identity matrix as B will be the inverse of A mod 5.

Some functions such as sqrt or log work in a different way when in modulo mode. These will then work like their discrete versions working within the ring of integers you selected. For example:

genius> sqrt(4) mod 7
=
[2, 5]
genius> 2*2 mod 7
= 4

sqrt will actually return all the possible square roots.

No concatene operadores mod, solo colóquelos al final del cálculo, todos los cálculos en la expresión que está a la izquierda se llevarán a cabo bajo aritmética mod. Si coloca un operador mod dentro de un mod seguramente obtendrá resultados inesperados. Si solo quiere aplicar mod a un único número y controlar cuándo se toma el resto, es mejor utilizar el operador %. Cuando necesita concatenar varias expresiones en una aritmética modular con diferentes divisores, lo mejor es simplemente dividir la expresión en varias y usar variables temporales para evitar un mod dentro de un mod.