Genius má implementovánu modulární aritmetiku. Když ji chcete použít, stačí přidat „mod <celé_číslo>“ za výraz. Například: 2^(5!) * 3^(6!) mod 5
Pro modulární aritmetiku by bylo možné použít i počítání s celými čísly a následně určením zbytku na konci pomocí operátoru %
, ale to je časově náročné, ne-li nemožné, při práci s většími čísly. Například 10^(10^10) % 6
jednoduše nebude pracovat (exponent bude příliš velký), zatímco 10^(10^10) mod 6
je spočteno v mžiku. V prvním příkladu se zkusí vypočítat 10^(10^10)
a pak najít zbytek po dělení 6, zatímco v druhém příkladu se vyhodnotí vše modulo 6 už na začátku.
Můžete počítat převrácenou hodnotu čísla mod nějaké celé číslo jednoduše pomocí racionálních čísel (samozřejmě musí převrácená hodnota existovat). Například:
10^-1 mod 101 1/10 mod 101
Modulární aritmetiku můžete použít i pro výpočty s maticemi, včetně inverze, umocňování a dělení. Příklad:
A = [1,2;3,4] B = A^-1 mod 5 A*B mod 5
Takto byste měli získat jednotkovou matici, protože B bude inverzní maticí A mod 5.
Některé funkce, jako třeba sqrt
nebo log
pracují v modulární aritmetice jiným způsobem. Budou pracovat jako jejich diskrétní verze pracující v okruhu vámi vybraných celých čísel. Například
genius> sqrt(4) mod 7 = [2, 5] genius> 2*2 mod 7 = 4 genius> 5*5 mod 7 = 4
sqrt
bude ve skutečnosti vracet všechny možné odmocniny.
Nezřetězujte operátory mod, umístěte jen jeden na konce výpočtu a všechny početní operace ve výrazu nalevo budou ošetřeny v modulární aritmetice. Když umístíte mod do mod, obdržíte neočekávané výsledky. Pokud chcete použít modulo na jediné číslo a jen zjistit, zda zůstane zbytek, je lepší použít operátor %
. Když potřebujete zřetězit několik výrazů v modulární aritmetice s různými děliteli, může být lepší rozdělit výraz na více výrazů a použít dočasné proměnné, aby se předešlo vložení mod do mod.