Modulární aritmetika

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.