diff --git a/07-teorie-cisel/Makefile b/07-teorie-cisel/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..ba6c63ec5ded7d730418a9f14feceb7ebe02fa5e
--- /dev/null
+++ b/07-teorie-cisel/Makefile
@@ -0,0 +1,3 @@
+TOP=..
+
+include ../Makerules
diff --git a/07-teorie-cisel/teorie-cisel.tex b/07-teorie-cisel/teorie-cisel.tex
new file mode 100644
index 0000000000000000000000000000000000000000..35500c34ff1495c927723fb7a71b897bedd2d113
--- /dev/null
+++ b/07-teorie-cisel/teorie-cisel.tex
@@ -0,0 +1,317 @@
+\ifx\chapter\undefined
+\input adsmac.tex
+\singlechapter{7}
+\fi
+
+\chapter[numth]{Teorie čísel}
+
+Nejběžnější asymetrické šifry a podpisy jsou založené na teorii čísel.
+V~této kapitole si pro to připravíme půdu a potřebné části teorie čísel
+vybudujeme. Budeme předpokládat, že čtenář už zná základy obecné algebry
+(grupy, okruhy, tělesa).
+
+Nejprve připomeneme základní značení:
+
+\list{o}
+\:Čísly budeme v~této kapitole obvykle myslet čísla celá. Pokud nebude
+  hrozit nedorozumění, budeme jim říkat prostě \em{čísla.}
+\:$p$ a~$q$ budou typicky značit \em{prvočísla.}
+\:$x\divs y$ značí, že číslo~$x$ je \em{dělitelem} čísla~$y$, tedy že existuje
+  $d$ takové, že $y=xd$.
+\:$\gcd(x,y)$ je \em{největší společný dělitel} $x$ a~$y$.\foot{Zkratka podle
+  anglického \em{greatest common divisor.}}
+  Případu $x=y=0$ se chceme vyhnout, protože tam je každé číslo společným dělitelem.
+\:$x\perp y$ značí, že $x$ a $y$ jsou \em{nesoudělná,} tedy $\gcd(x,y)=1$.
+\:$x\equiv y\pmod n$ je \em{kongruence modulo~$n>0$,} která znamená, že $x$ a~$y$
+  dávají stejný zbytek modulo~$n$. To je totéž, jako že $n\divs (x-y)$.
+  Pokud bude z~kontextu jasné, modulo čím počítáme, budeme psát prostě $x\equiv y$.
+\endlist
+
+\section{Základní aritmetické algoritmy}
+
+Většinou nás bude zajímat nejen to, jak k~danému výsledku dojít, ale také jak rychle to dokážeme.
+Zopakujme si proto složitost základních operací s~čísly vzhledem k~jejich délce~$b$ v~bitech:
+
+\list{o}
+\:\em{Sčítání a odčítání} zvládneme v~čase $\O(b)$ algoritmem \uv{sčítání pod sebou} ze základní školy.
+\:\em{Násobení} algoritmem ze základní školy trvá $\O(b^2)$, existují i efektivnější algoritmy --
+  Karacubův-Ofmanův v~čase $\O(b^{1.59})$, použitím FFT dokonce v~$\O(b)$. Nám bude stačit $\O(b^2)$.
+\:\em{Dělení se zbytkem} buď algoritmem ze základní školy v~čase $\O(b^2)$, nebo Newtonovou
+  iterací -- pokud násobíme v~čase $\O(b^{1+\varepsilon})$, trvá dělení také $\O(b^{1+\varepsilon})$;
+  pokud násobíme v~lineárním čase, trvá dělení $\O(b\log b)$. Každopádně nám bude stačit $\O(b^2)$.
+\:\em{Modulární umocňování} $x^y \bmod n$ počítáme rekurzivním algoritmem:
+  pro $y$ sudé počítáme $(x^{y/2})^2$, pro $y$ liché $(x^{(y-1)/2})^2\cdot x$, vše modulo~$n$.
+  Kroků rekurze je $\log n\le b$, každý nás stojí $\O(1)$ aritmetických operací v~čase $\O(b^2)$.
+  Celkem tedy $\O(b^3)$.
+\endlist
+
+\subsection{Euklidův algoritmus}
+
+K~výpočtu $\gcd(x,y)$ můžeme používat Euklidův algoritmus. Jeho základní varianta
+opakovaně odečítá menší číslo od většího, než se vyrovnají. Vylepšená varianta místo
+opakovaného odčítání počítá zbytek po dělení.
+
+Základní varianta je pomalá (představte si chování pro $x=10^9$, $y=1$).
+Vylepšená varianta doběhne v~$\O(\log(\min(x,y))) \subseteq \O(b)$ krocích,
+důkaz najdete například v~Průvodci labyrintem algoritmů.
+Jeden krok přitom trvá $\O(b^2)$, takže celý algoritmus $\O(b^3)$.
+Pečlivější analýzou, která bude brát v~úvahu, jak se během výpočtu vyvíjí velikosti
+čísel, můžeme získat odhad $\O(b^2)$.
+
+Často se nám bude hodit \em{rozšířený Euklidův algoritmus,} který získáme následovně.
+
+\lemma{
+Všechny mezivýsledky v~Euklidově algoritmu jsou lineární kombinace vstupu~$x$ a~$y$.
+Koeficienty této lineární kombinace můžeme během výpočtu udržovat bez asymptotického
+zpomalení.
+}
+
+\proof
+Pro základní variantu algoritmu to snadno dokážeme indukcí podle počtu kroků.
+Označíme $x'$ a $y'$ pracovní proměnné algoritmu. Na začátku je $x'=1\cdot x + 0\cdot y$
+a $y'=0\cdot x + 1\cdot y$. Kdykoliv odečteme od $x'=\alpha x + \beta y$ proměnnou
+$y'=\gamma x + \delta y$, získáme $x-y = (\alpha-\gamma)x + (\beta-\delta)y$.
+
+Jeden krok vylepšené varianty je zkratkou za více kroků varianty základní.
+Počítáme-li $x'\bmod y'$ pro $x'=\alpha x + \beta y$ a $y'=\gamma x + \delta y$,
+provádíme vlastně $d=\lfloor x'/y'\rfloor$ odečtení $y'$ od~$x'$. Výsledek tedy bude
+$(\alpha-d\gamma)x + (\beta-d\delta y)$.
+\qed
+
+Finální výsledek $\gcd(x,y)$ je ovšem jedním z~mezivýsledků, takže dostáváme:
+
+\corr{
+Rozšířený Euklidův algoritmus v~čase $\O(b^2)$ spočítá $\gcd(x,y)$ a čísla $\alpha$ a~$\beta$
+taková, že $\gcd(x,y) = \alpha x + \beta y$. Těmto číslům se říká \em{Bèzoutovy
+koeficienty.}
+}
+
+\section{Algebraické minimum}
+
+V~tomto oddílu připomeneme základní pojmy z~obecné algebry.
+
+\defn{
+\em{Algebra} je tvořena nosnou množinou spolu s~nějakými operacemi. \hbox{$k$-ární} operací nazýváme
+funkci, která $k$-ticím prvků z~nosné množiny přiřazuje opět prvky nosné množiny. Nulární operace
+jsou {\I konstanty.}
+}
+
+\defn{
+\em{Homomorfismus} mezi algebrami stejného typu (s~odpovídajícími si operacemi) je zobrazení
+mezi jejich nosnými množinami, které je kompatibilní s~operacemi. Tedy $f(a+b) = f(a) + f(b)$ apod.
+Pokud je zobrazení navíc bijektivní, mluvíme o~\em{izomorfismu.}
+}
+
+\subsection{Grupy}
+
+\defn{
+\list{o}
+\def\1{{\bf 1}}
+\:\em{Grupa} je algebra $(G,\cdot,\1,{}\inv)$, kde $G$ je nosná množina,
+$\cdot$ binární operace nad $G$, \1~konstanta, ${}\inv$ unární operace nad~$G$
+a platí následující axiomy:
+  \tightlist{n.}
+  \:$(a\cdot b)\cdot c = a\cdot (b\cdot c)$ {\quad \I (asociativita)}
+  \:$a\cdot \1 = a$ {\quad \I (prvek \/\1 je jednotkový)}
+  \:$a\cdot (a\inv)=(a^{\-1}\cdot a)=\1$ \em{($a\inv$ je prvek inverzní k~$a$)}
+  \endlist
+\:V~\em{komutativní grupě} navíc platí $a\cdot b = b\cdot a$ \em{(komutativita)}.
+\:$(H,\cdot,\1,{}\inv)$ je \em{podgrupou} grupy $(G,\cdot,\1,{}\inv)$ právě tehdy, když $H\subseteq G$
+  a množina $H$ je uzavřená na~všechny tři operace (tj. provedeme-li operaci s~prvky z~$H$, musí opět
+  vyjít prvek z~$H$). $(H,\cdot,\1,{}\inv)$ je pak také grupou.
+\:\em{Řád grupy} říkáme počtu prvků její nosné množiny. Značíme ho~$|G|$.
+\:Pro prvek~$a$ a číslo $n\in\Z$ dále definujeme \em{mocninu} takto: $a^0=\1$, $a^{n+1}=a^n\cdot a$, $a^{n-1}=a^n\cdot a\inv$.
+  Platí obvyklé vlastnosti mocniny: $a^{m+n} = a^m \cdot a^n$, $a^{mn}=(a^m)^n$, $a^{-n} = (a^n)\inv$ apod.
+\:Prvku $g$ říkáme \em{generátor} grupy, jestliže se každý prvek nosné množiny dá vyjádřit jako nějaká mocnina~$g$.
+  Grupa je \em{cyklická,} pokud má generátor.
+\:Pro libovolný prvek~$a$ je $\{ a^n \mid n\in\Z \}$ cyklická podgrupa. \em{Řád prvku~$a$} definujeme jako řád této podgrupy.
+\endlist
+}
+
+\examples{
+\list{o}
+\:$(\Z,+,0,-)$ (celá čísla spolu s~obvyklým sčítáním, nulou a změnou znaménka) tvoří cyklickou grupu (generátory
+jsou 1 a $-1$).
+\:$(2\Z,+,0,-)$ (sudá celá čísla spolu s~obvyklým sčítáním, nulou a změnou znaménka) tvoří podgrupu předchozí grupy,
+která je také cyklická (rozmyslete si, že každá podgrupa cyklické grupy je cyklická),
+\:$(\Z_n,+_{\bmod n},0,-)$ (čísla 0, 1, \dots, $n-1$ spolu se sčítáním modulo~$n$, nulou a změnou
+znaménka) tvoří cyklickou grupu (generátorem je třeba~1; které jsou další?),
+\:$({\bb Q},\cdot,1,?)$ (racionální čísla s~násobením) nemohou tvořit grupu, jelikož k~nule neexistuje inverzní prvek,
+\:$({\bb Q}-\{0\},\cdot,1,1/x)$ (racionální čísla bez nuly s~násobením a převrácenou hodnotou) grupu tvoří,
+není cyklická.
+\:$(\Z_n-\{0\},\cdot_{\bmod n},?)$ (čísla 1\dots$n-1$ s~násobením modulo~$n$) pro některá $n$ grupou je,
+pro jiná není, protože obecně nemusí existovat inverzní prvky. Za chvíli prozkoumáme, jak to přesně je.
+\endlist
+}
+
+\obs{
+Konečná cyklická grupa řádu~$n$ je vždy izomorfní se~$\Zn$, nekonečná je izomorfní se~$\Z$.
+Je-li $g$ generátor, funkce $x \mapsto g^x$ je izomorfismem.
+}
+
+\claimn{Langrangeova věta}{
+Pokud má konečná grupa $G$ nějakou podgrupu $H$, platí $|H| \divs |G|$.
+}
+
+\subsection{Okruhy a tělesa}
+
+\defn{
+\list{o}
+\def\0{{\bf 0}}
+\def\1{{\bf 1}}
+\:\em{Okruh} je algebra $(R,+,\cdot,\0,\1,-)$, kde:
+
+	\tightlist{o}
+	\:$R$ je nosná množina.
+	\:$+$ a~$\cdot$ jsou binární operace, $\0$ a~$\1$ konstanty, $-$~je unární operace.
+	\:$(R,+,\0,-)$ je komutativní grupa (aditivní grupa okruhu).
+	\:Operace~$\cdot$ je komutativní a asociativní.
+	\:$a\1 = \1a = a$ pro všechna~$a$.
+	\:$(a+b)\cdot c = a\cdot c + b\cdot c$ \quad\em{(distributivita)}.
+	\endlist
+
+	Algebraikové někdy připouští nekomutativní okruhy (s~nekomutativní operací~$+$),
+	naše okruhy budou vždy komutativní.
+
+\:Prvek $a\in R$ má \em{multiplikativní inverzi} $a\inv$, pokud platí $a\cdot a\inv = \1$.
+  Pokud multiplikativní inverze existuje, je jednoznačně určena.
+
+\:\em{Těleso} je okruh, v~němž má každý prvek $a\ne\0$ multiplikativní inverzi~$a\inv$.
+  Tedy $(R\setminus\{\0\},\cdot,\1,{}\inv)$ tvoří komutativní grupu.
+  Přitom ${}\inv$ považujeme za další unární operaci algebry, kterou musí zachovávat morfismy
+  (nenecháme se zmást tím, že pro~$\0$ není definovaná; třeba ji pevně dodefinujeme jako~$\0$).
+
+\endlist
+}
+
+\examples{
+\list{o}
+\:$(\Z,+,\cdot,0,1,-)$ (celá čísla spolu s~obvyklými operacemi) tvoří okruh, který není tělesem
+(žádný prvek kromě~$\pm 1$ není invertibilní).
+\:$(\Q,+,\cdot,0,1,-)$ (racionální čísla spolu s~obvyklými operacemi) tvoří těleso.
+\:$(\R,+,\cdot,0,1,-)$ (reálná čísla spolu s~obvyklými operacemi) tvoří těleso.
+\:$(\Z_n,+,\cdot,0,1,-)$ (čísla $\{0,\ldots,n-1\}$ se sčítáním, odčítáním a násobením modulo~$n$)
+je také okruh, časem prozkoumáme, pro která~$n$ tvoří těleso.
+\:$(\{0,1\},\oplus,\land,0,1,\<id>)$ (kde~$\oplus$ je \XOR) je okruh izomorfní se~$\Z_2$,
+dokonce je to těleso.
+\endlist
+}
+
+\section{Počítání modulo n}
+
+\subsection{Invertibilní prvky}
+
+Okruh~$\Zn$ není vždy těleso -- často mu chybí inverzní prvky vzhledem k~násobení.
+
+\defn{
+\em{Multiplikativní inverze} čísla~$x\in\Zn$ je $x\inv\in\Zn$ takové, že $xx\inv\equiv 1$.
+Číslo~$x$ je \em{invertibilní,} pokud má multiplikativní inverzi.
+}
+
+\example{
+V~okruhu $\Z_6$ jsou čísla 1 a~$5\equiv -1$ invertibilní, protože
+$1\cdot 1\equiv 1$ a $5\cdot 5\equiv 1$. Ostatní čísla invertibilní
+nejsou: například každý násobek~2 je sudý, což je modulo~6 stále sudé,
+takže to nemůže být~1. Naproti tomu v~$\Z_5$ jsou všechna nenulová
+čísla invertibilní: $1\cdot 1\equiv 2\cdot 3\equiv 3\cdot 2\equiv 4\cdot 4\equiv 1$.
+}
+
+Invertibilní prvky můžeme snadno charakterizovat:
+
+\lemma{
+$a\in\Zn$ je invertibilní právě tehdy, když $a\perp n$.
+}
+
+\proof
+Pro dané~$a$ hledáme~$x$ takové, že $ax\equiv 1$. Tedy $ax$ se liší od~1
+o~nějaký násobek~$n$. To znamená, že existuje $y$ takové, že $ax+ny=1$.
+Pokud $\gcd(a,n)=1$, můžeme takové $x$ a~$y$ snadno najít -- jsou to totiž
+Bèzoutovy koeficienty. Je-li naopak $\gcd(a,n) = d>1$, budou jak $ax$,
+tak $ny$ násobky~$d$, takže bude násobkem~$d$ i $ax+ny$, zatímco 1 nikdy
+není násobkem~$d$.
+\qed
+
+\corr{
+Rozšířeným Euklidovým algoritmem můžeme v~čase $\O(b^2)$ rozhodnout,
+zda multiplikativní inverze existuje, a~dokonce ji i najít.
+}
+
+\defn{
+$\Zsn = \{x\in\Zn \mid x\perp n\}$ je množina všech invertibilních prvků ze~$\Zn$.
+Spolu s~násobením modulo~$n$ a jednotkovým prvkem~1 tvoří
+\em{multiplikativní grupu modulo~$n$.}
+Její řád (počet prvků) udává \em{Eulerova funkce} $\varphi(n) = \vert\Zsn\vert$.
+}
+
+Ověřme, že se opravdu jedná o~grupu. Musíme ukázat, že množina~$\Zsn$ je uzavřená
+na všechny grupové operace:
+
+\tightlist{(n)}
+\:Pro $x$ a~$y$ invertibilní je $xy$ též invertibilní. Jelikož $(xy)(y\inv x\inv) \equiv x1x\inv \equiv 1$,
+máme $(xy)\inv = y\inv x\inv$.
+\:$x\inv$ je invertibilní, jeho inverzí je zpět~$x$.
+\:Prvek~1 je invertibilní, neboť $1\cdot 1\equiv 1$.
+\endlist
+
+\corr{
+Počítáme-li modulo prvočíslo~$p$, pak všechna nenulová $x\in\Zp$ jsou
+nesoudělná s~$p$, a~tedy invertibilní.
+Proto $\Zsp = \{1,\ldots,p-1\}$ a $\varphi(p)=p-1$.
+Z~toho plyne, že $\Zp$ je nejen okruh, ale dokonce těleso.
+Sčítání, odčítání, násobení i dělení v~tomto tělese můžeme počítat v~čase $\O(b^2)$.
+}
+
+\subsection{Malá Fermatova a Eulerova věta}
+
+\theoremn{malá Fermatova}{
+Pro každé prvočíslo~$p$ a číslo $x\perp p$ platí $x^{p-1}\equiv 1\pmod p$.
+}
+
+\corr{
+$x^{p-2}\bmod p$ je multiplikativní inverze~$x$ modulo~$p$, neboť $x\cdot x^{p-2} \equiv x^{p-1} \equiv 1$.
+}
+
+Malou Fermatovu větu nebudeme dokazovat přímo, plyne totiž z~následující
+obecnější věty díky tomu, že pro prvočísla platí $\varphi(p) = p-1$.
+
+\theoremn{Eulerova}{
+Pro každé $n>1$ a $x\perp p$ platí $x^{\varphi(n)}\equiv 1\pmod n$.
+}
+
+\proof
+Uvažme množinu $H = \{x^0, x^1, x^2, \ldots\}$ (násobíme modulo~$n$).
+Jelikož~$x$ je invertibilní prvek a ty jsou uzavřené na násobení,
+je~$H$ podmnožínou~$\Zsn$. Dokážeme, že je dokonce podgrupou.
+
+Jelikož $x^i$ mohou nabývat jen konečně mnoha hodnot, musí se nějaká
+hodnota zopakovat. Uvažme první takové opakování, tedy nejmenší~$j$
+takové, že $x^j$ je rovno nějakému $x^i$ pro $i<j$. Všimneme si,
+že prvek, který se zopakoval, musí být~$x^0=1$. Kdyby tomu tak nebylo,
+pak je $x^{j-i}=1$, takže~1 se zopakovala dřív.
+Máme tedy $x^j = 1$, mocniny $x^0$ až $x^{j-1}$ jsou navzájem různé,
+a~proto $|H| = j$.
+
+Nyní si všimneme, že množina~$H$ je uzavřená na násobení:
+$x^a \cdot x^b \equiv x^{a+b}$. Je-li $a+b < j$, pak $x^{a+b}$ leží v~$H$.
+Jinak je $x^{a+b} \equiv x^j \cdot x^{a+b-j}$, jenže $x^j\equiv 1$
+a $a+b-j < j$, takže $x^{a+b}$ opět leží v~$H$.
+Podobně nahlédneme, že $H$ je uzavřená na inverzní prvky:
+inverzním prvkem k~$x^a$ je $x^{j-a}$.
+
+Teď už víme, že $H$ je podgrupou~$\Zsn$, a~můžeme použít Lagrangeovu
+větu. Podle ní platí $|H| \divs |\Zsn|$, tedy $j \divs \varphi(n)$.
+Tím pádem je $\varphi(n) = jk$ pro nějaké~$k$, takže můžeme psát
+$x^{\varphi(n)} \equiv x^{jk} \equiv (x^j)^k \equiv 1^k \equiv 1$.
+\qed
+
+\subsection{Činská věta o~zbytcích}
+
+\subsection{Eulerova funkce}
+
+\section{Faktorizace versus prvočíselnost}
+
+\section{Diskrétní logaritmy}
+
+\section{Diskrétní odmocniny}
+
+\endchapter
diff --git a/tex/adsmac.tex b/tex/adsmac.tex
index 470c75f82a3ca34d7a8c97c21c45db204ef97d73..0a53e75ffe8773c89bc29a0cb93a23b31dad0d0d 100644
--- a/tex/adsmac.tex
+++ b/tex/adsmac.tex
@@ -146,11 +146,19 @@
 % Konkatenace
 \def\concat{\mathop{\Vert}}
 
-% Prirozena a realna cisla
+% Číselné obory
 \def\N{{\bb N}}
 \def\R{{\bb R}}
 \def\Z{{\bb Z}}
+\def\Q{{\bb Q}}
+
+% Teorie čísel
 \def\Zp{{\bb Z}_p}
+\def\Zsp{{\bb Z}^*_p}
+\def\Zn{{\bb Z}_n}
+\def\Zsn{{\bb Z}^*_p}
+\def\divs{\mathbin\backslash}
+\def\inv{^{-1}}
 
 % Komplexni cisla
 \def\C{{\bb C}}