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.
Du kan beräkna inverserna av tal modulo något heltal genom att bara använda rationella tal (givetvis måste inversen existera). Exempel:
10^-1 mod 101 1/10 mod 101
Du kan också utföra modulär evaluering med matriser inklusive att ta inverser, potenser och division. Exempel:
A = [1,2;3,4] B = A^-1 mod 5 A*B mod 5
Detta skulle ge identitetsmatrisen eftersom B kommer vara inversen av A mod 5.
Vissa funktioner som sqrt
eller log
fungerar annorlunda i moduloläge. Dessa kommer då fungera som sina diskreta versioner inom den ring av heltal som du valt. Till exempel:
genius> sqrt(4) mod 7 = [2, 5] genius> 2*2 mod 7 = 4
sqrt
kommer faktiskt returnera alla möjliga kvadratrötter.
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.