Modulární aritmetika
Předcházející | Kapitola 5. Základy jazyka GEL | Další

## 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.

Předcházející | Nahoru | Další
Komentáře | Domů | Seznam operátorů GEL