From 13d0df8e2aa64378449c7b8d783f9b2835ffe098 Mon Sep 17 00:00:00 2001 From: Martin Mares <mj@ucw.cz> Date: Thu, 10 Apr 2025 11:25:54 +0200 Subject: [PATCH] =?UTF-8?q?Teorie=20=C4=8D=C3=ADsel:=20Efektivn=C3=AD=20CR?= =?UTF-8?q?T?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 02-perfect/perfect.tex | 2 +- 07-teorie-cisel/teorie-cisel.tex | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/02-perfect/perfect.tex b/02-perfect/perfect.tex index a00c5be..b5efeb4 100644 --- a/02-perfect/perfect.tex +++ b/02-perfect/perfect.tex @@ -189,7 +189,7 @@ Pokud se sejde méně než~$\ell$, v~každé $\ell$-tici nějaká část chybí, takže z~žádné $\ell$-tice se nic nedozvíme. } -\subsection{Shamirovo schéma} +\subsection[shamir]{Shamirovo schéma} Efektivní konstrukci $(k,\ell)$-schémat popsal v~roce 1979 Adi Shamir. Začneme triviálním případem. diff --git a/07-teorie-cisel/teorie-cisel.tex b/07-teorie-cisel/teorie-cisel.tex index d7d991f..33b01f0 100644 --- a/07-teorie-cisel/teorie-cisel.tex +++ b/07-teorie-cisel/teorie-cisel.tex @@ -376,6 +376,30 @@ Dále pokračujeme indukcí podle~$k$, přičemž případ pro $k=2$ použijeme jako indukční krok. \qed +Nám se ovšem bude hodit i konstruktivní důkaz, který nám umožní hledané~$x$ efektivně najít. + +\theoremn{Efektivní CRT}{ +$f\inv(a_1,\ldots,a_k)$ lze spočítat v~čase $\O(kb^2)$. +} + +\proof +Větu opět stačí dokázat pro $k=2$ a pak použít indukci. + +Inspirujeme se Lagrangeovou interpolací z~oddílu \secref{shamir}. +Pokud bychom znali čísla $u_1$ a~$u_2$ taková, že $f(u_1) = (1,0)$ +a $f(u_2) = (0,1)$, řešením je jejich lineární kombinace +$x = (a_1u_1 + a_2u_2) \bmod N$. +Jelikož $f$ je homomorfismus, je lineární. Proto platí: +$f(x) = a_1f(u_1) + a_2f(u_2) = a_1(1,0) + a_2(0,1) = (a_1,a_2)$. + +Zbývá si pořídit~$u_1$ ($u_2$~najdeme obdobně) +Nejprve si všimneme, že $f(N_2) = (v_1,0)$ pro nějaké~$v_1$. +Pokud je $v_1=1$, položíme $u_1=N_2$ a jsme hotovi. +Jinak najdeme multiplikativní inverzi~$w_1$ čísla $v_1$ modulo~$N_1$ +a položíme $u_1=w_1N_2$. Bude platit $f(u_1) = f(w_1N_2) = w_1f(N_2) += w_1(v_1,0) = (w_1v_1\bmod N_1,0) = (1,0)$. +\qed + \subsection{Eulerova funkce} Už jsme zavedli funkci~$\varphi(n)$, která udává, kolik prvků ze~$Z_n$ je nesoudělných s~$n$, -- GitLab