Moduloberäkning

Genius implementerar modulär aritmetik. För att använda det lägger du bara till ”mod <heltal>” efter uttrycket. Exempel: 2^(5!) * 3^(6!) mod 5 Det kunde vara möjligt att utföra modulär aritmetik genom att beräkna med heltal och sedan beräkna modulo i slutet med %-operatorn, vilken helt enkelt ger resten, men det kan vara tidskrävande om inte omöjligt då man arbetar med större tal. Till exempel, 10^(10^10) % 6 kommer helt enkelt inte att fungera (exponenten kommer vara för stor), medan 10^(10^10) mod 6 är omedelbart. Det första uttrycket försöker först att beräkna heltalet 10^(10^10) och sedan hitta resten efter division med 6, medan det andra uttrycket evaluerar allting modulo 6 till att börja med.

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.

Kedja inte samman modulo-operatorer, placera det helt enkelt i slutet på beräkningen, alla beräkningar i uttrycket till vänster kommer utföras i modulär aritmetik. Om du placerar en mod inuti en annan mod kommer du att få oväntade resultat. Om du helt enkelt vill beräkna modulo av ett enda tal och kontrollera exakt då rester tas är det bäst att använda %-operatorn. Då du behöver kedja samman flera uttryck i modulär aritmetik med olika delare kan det vara bäst att bara dela upp uttrycken i flera och använda tillfälliga variabler för att undvika att ha mod inuti mod.