# Modulární počítání

## Eukleidův algoritmus

Algoritmus pro nalezení největšího společného dělitele čísel $a$ a $b$. Největšího společného dělitele označíme jako $\gcd(a, b)$.

Mějme $a = 57, b = 27$. Platí, že $c = \gcd(a, b)$ dělí $a$ a rovněž $b$, dělí tedy i rozdíl $a-b = 30$. Pokud nyní najdeme $\gcd(30, 27)$, získáme i $\gcd(57, 27)$. Aplikacím tohoto postupu dostaneme postupně $\gcd(30, 27) = \gcd(3, 27) = 3$, tedy i $\gcd(57, 27) = 3$.

## Modulární aritmetika

Ekvivalence $\sim$ na množině $X$ je relace na $X$, která je reflexivní, symetrická a tranzitivní.

Ekvivalence, která zachovává operace definované na množině, se nazývá **kongruence**. Jedna z takových kongruencí je například kongruence modulo $p$.

Pro $a \in \mathbb{Z}_{n}$ rozumíme opačným prvkem prvek $x \in \mathbb{Z}_{n}$ takový, že řeší rovnici $a \cdot x \equiv 1 \quad (\text{mod } n)$. Značíme jej $-a$.

## Kongruence modulo $p$

Motivace: při počítání hodin je pro nás obvykle 13 hodin to stejné, jako 1 hodina.

**Definice**: Mějme $p \geq 1$ a celá čísla $a, b \in \mathbb{Z}$. Relaci $\equiv (\text{mod }p)$ na množině $\mathbb{Z}$ nazveme **kongruencí modulo** $p$, kterou značíme $a \equiv b \space (\text{mod }5)$, jestliže $n$ dělí $b - a$.
- předpis: $a \equiv b \space (\text{mod }p) \iff (b - a) \text{ je dělitelné } p$

**Příklad**: Z hodin víme, že $21 \equiv 9 \space (\text{mod }12)$. Zkouška podle definice: $9−21 = −12$, což je dělitelné dvanácti. Jiný příklad: $(-2) \equiv 13 \space (\text{mod }5)$, protože $13 - (-2) = 15$, což je dělitelné pěti.

### Zbytkové třídy

Kongruence modulo $p$ je ekvivalence, její třídy ekvivalence nazýváme **zbytkové třídy** a označujeme $\mathbb{Z}_{p}(i), i = 0, \dots, p-1$.

Každá z $p$ tříd této ekvivalence je **tvořena všemi čísly**, která **při dělení číslem** $p$ dávají **tentýž zbytek**.

**Operace**: Na množině $\mathbb{Z}_{p}$ definujeme operace $\oplus$ a $\otimes$ předpisem:
- $\mathbb{Z}_{p}(i) \oplus \mathbb{Z}_{p}(j) = \mathbb{Z}_{p}(i+j)$
- $\mathbb{Z}_{p}(i) \otimes \mathbb{Z}_{p}(j) = \mathbb{Z}_{p}(ij)$

Nechť $p \geq 1$ je přirozené číslo. Potom pro každé prvky $a, b, c \in \mathbb{Z}_{p}$ platí:
1) komutativita: $\quad a \oplus b = b \oplus a, \quad a \otimes b = b \otimes a$,
2) asociativita: $\quad (a \oplus b)  \oplus c = a \oplus (b \oplus c), \quad (a \otimes b) \otimes c = a \otimes (b \otimes c)$,
3) neutrální prvek: $\quad a \oplus 0 = a, \quad a \otimes 1 = a$,
4) opační prvek: $\quad \exists \, (-a) \in \mathbb{Z}_{p}, \quad a \oplus (-a) = 0$,
5) distributivita: $\quad a \otimes (b \oplus c) = (a \otimes b) \oplus (a \otimes c)$,

kde $0 = \mathbb{Z}_{p}(0)$ a $1 = \mathbb{Z}_{p}(1)$.
## Aritmetika modulo $p$

**Definice**
- Nechť $p \geq 1$ je přirozené číslo. Pro každou zbytkovou třídu $\mathbb{Z}_{p}$ vybereme jednoho **reprezentanta**, tedy prvek v intervalu $\langle 0, p-1 \rangle$.
- Množinu všech takových reprezentantů nazveme **úplnou soustavou zbytků modulo** $p$.
- Operace $\oplus$ a $\otimes$ použité na úplné soustavě zbytků modulo $p$ nazveme **aritmetikou modulo** $p$.

