Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
Ú
Úvod do kryptografie
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Package registry
Model registry
Operate
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Martin Mareš
Úvod do kryptografie
Commits
aef897af
Commit
aef897af
authored
3 months ago
by
Martin Mareš
Browse files
Options
Downloads
Patches
Plain Diff
Teorie čísel: Korektury
parent
2c20c8a0
No related branches found
No related tags found
No related merge requests found
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
07-teorie-cisel/teorie-cisel.tex
+69
-59
69 additions, 59 deletions
07-teorie-cisel/teorie-cisel.tex
tex/adsmac.tex
+1
-1
1 addition, 1 deletion
tex/adsmac.tex
with
70 additions
and
60 deletions
07-teorie-cisel/teorie-cisel.tex
+
69
−
59
View file @
aef897af
...
...
@@ -22,10 +22,13 @@ Nejprve připomeneme základní značení:
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
$
\:
$
x
\equiv
_
n
y
$
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
)
$
.
Někdy to budeme zkracovat na
$
x
\equiv
_
n y
$
a~pokud bude z~kontextu jasné, modulo čím počítáme, budeme psát prostě
$
x
\equiv
y
$
.
Často se také píše
$$
x
\equiv
y
\pmod
n.
$$
Pokud bude z~kontextu jasné, modulo čím počítáme, budeme psát prostě
$
x
\equiv
y
$
.
\endlist
\section
{
Základní aritmetické algoritmy
}
...
...
@@ -62,21 +65,21 @@ Pečlivější analýzou, která bude brát v~úvahu, jak se během výpočtu vy
Č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 vstup
u
~
$
x
$
a~
$
y
$
.
K
oeficienty této lineární kombinace můžeme během výpočtu udržovat bez asymptotického
zpomal
ení
.
Všechny mezivýsledky v~Euklidově algoritmu jsou lineární kombinace vstup
ů
~
$
x
$
a~
$
y
$
.
K
e každému mezivýsledku můžeme během výpočtu udržovat i koeficienty příslušné lineární
kombinace, aniž bychom algoritmus asymptoticky
zpomal
ili
.
}
\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
$
.
$
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
)
$
.
$
(
\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:
...
...
@@ -92,7 +95,7 @@ koeficienty.}
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
\em
{
Algebra
}
je tvořena nosnou množinou spolu s~nějakými
\em
{
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.
}
}
...
...
@@ -113,7 +116,7 @@ $\cdot$ binární operace nad $G$, \1~konstanta, ${}\inv$ unární operace nad~$
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
\1
=
\1\cdot
a
=
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)
}
.
...
...
@@ -134,10 +137,10 @@ a platí následující axiomy:
\:
$
(
\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á)
,
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
,
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,
...
...
@@ -171,7 +174,7 @@ Pokud má konečná grupa $G$ nějakou podgrupu $H$, platí $|H| \divs |G|$.
\:
$
(
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í~
$
+
$
),
Algebraikové někdy připouští nekomutativní okruhy (s~nekomutativní operací~
$
\cdot
$
),
naše okruhy budou vždy komutativní.
\:
Prvek
$
a
\in
R
$
má
\em
{
multiplikativní inverzi
}
$
a
\inv
$
, pokud platí
$
a
\cdot
a
\inv
=
\1
$
.
...
...
@@ -265,7 +268,7 @@ Sčítání, odčítání, násobení i dělení v~tomto tělese můžeme počí
\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
$
.
Pro každé prvočíslo~
$
p
$
a číslo
$
x
\perp
p
$
platí
$
x
^{
p
-
1
}
\equiv
_
p
1
$
.
}
\corr
{
...
...
@@ -276,13 +279,13 @@ 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
$
.
Pro každé
$
n>
1
$
a
$
x
\perp
p
$
platí
$
x
^{
\varphi
(
n
)
}
\equiv
_
n
1
$
.
}
\proof
Uvažme množinu
$
H
=
\{
x
^
0
, x
^
1
, x
^
2
,
\ldots\}
$
(
násobí
me modulo~
$
n
$
).
Uvažme množinu
$
H
=
\{
x
^
0
, x
^
1
, x
^
2
,
\ldots\}
$
(
umocňuje
me modulo~
$
n
$
).
Jelikož~
$
x
$
je invertibilní prvek a ty jsou uzavřené na násobení,
je~
$
H
$
podmnožinou~
$
\Zsn
$
. Dokážeme, že je dokonce podgrupou.
je~
$
H
$
podmnožinou~
$
\Zsn
$
. Dokážeme, že je dokonce podgrupou
~
$
\Zsn
$
.
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
$
...
...
@@ -337,11 +340,11 @@ Zamysleme se nad jejími vlastnostmi:
\list
{
n.
}
\:
Nejprve si všimneme, že
$
f
$
je prostá.
Pokud
$
f
(
x
)=
f
(
y
)
$
, pak
$
x
\bmod
N
=
y
\bmod
N
_
1
$
, tedy
$
N
_
1
\divs
(
x
-
y
)
$
.
Pokud
$
f
(
x
)=
f
(
y
)
$
, pak
$
x
\bmod
N
_
1
=
y
\bmod
N
_
1
$
, tedy
$
N
_
1
\divs
(
x
-
y
)
$
.
Podobně dostaneme
$
N
_
2
\divs
(
x
-
y
)
$
. Jelikož
$
N
_
1
\perp
N
_
2
$
, plyne z~toho
také
$
N
\divs
(
x
-
y
)
$
. To je ovšem pro
$
x,y
\in\Z
_
N
$
možné jen tehdy, když
$
x
=
y
$
.
\:
Každá prostá funkce mezi dvěma stejně velkými množinami
ovšem
musí být bijekce.
\:
Každá prostá funkce mezi dvěma stejně velkými množinami musí být bijekce.
To znamená, že naše soustava kongruencí má pro každé
$
a
_
1
$
a~
$
a
_
2
$
právě
jedno řešení
$
f
\inv
(
a
_
1
,a
_
2
)
$
.
...
...
@@ -403,13 +406,13 @@ a položíme $u_1=w_1N_2$. Bude platit $f(u_1) = f(w_1N_2) = w_1f(N_2)
\subsection
{
Eulerova funkce
}
Už jsme zavedli funkci~
$
\varphi
(
n
)
$
, která udává, kolik prvků ze~
$
Z
_
n
$
je nesoudělných s~
$
n
$
,
Už jsme zavedli funkci~
$
\varphi
(
n
)
$
, která udává, kolik prvků ze~
$
\
Zn
$
je nesoudělných s~
$
n
$
,
tedy invertibilních. Nyní se podívejme, jak tuto funkci počítat.
\lemma
{
Pro Eulerovu funkci~
$
\varphi
$
platí:
\list
{
n.
}
\:
$
\varphi
(
p
)
=
p
-
1
$
\:
$
\varphi
(
p
^
k
)
=
(
p
-
1
)
p
^{
k
-
1
}$
\:
$
\varphi
(
p
)
=
p
-
1
$
.
\:
$
\varphi
(
p
^
k
)
=
(
p
-
1
)
p
^{
k
-
1
}$
.
\:
$
\varphi
(
mn
)
=
\varphi
(
m
)
\varphi
(
n
)
$
, kdykoliv
$
m
\perp
n
$
.
\endlist
}
...
...
@@ -422,9 +425,9 @@ tedy invertibilních. Nyní se podívejme, jak tuto funkci počítat.
Zbývá tedy
$
(
1
-(
1
/
p
))
p
^
k
$
nesoudělných, což je rovno uvedenému výrazu.
\:
Využijme bijekci
$
x
\mapsto
(
a
\bmod
m, a
\bmod
n
)
$
z~CRT. Číslo
$
x
$
je nesoudělné s~
$
mn
$
právě tehdy, když je nesoudělné s~
$
m
$
a současně s~
$
n
$
. To je totéž jako že
$
a
$
je nesoudělné s~
$
m
$
a~současně
$
b
$
nesoudělné s~
$
n
$
. Tomu odpovídá
$
\varphi
(
m
)
\cdot\varphi
(
n
)
$
dvojic zbytků,
a~tím pádem stejný počet čísel
~
$
x
$
.
právě tehdy, když je nesoudělné s~
$
m
$
a současně s~
$
n
$
. To je totéž jako že
ve dvojici
zbytků
$
(
a,b
)
$
je
$
a
$
nesoudělné s~
$
m
$
a~současně
$
b
$
nesoudělné s~
$
n
$
. Takových dvojic
je
$
\varphi
(
m
)
\cdot\varphi
(
n
)
$
a každá odpovídá právě jednomu nesoudělnému
~
$
x
$
.
\qeditem
\endlist
...
...
@@ -468,7 +471,7 @@ Jak navrhnout pravděpodobnostní test prvočíselnosti? Testujeme-li číslo~$n
vygenerovat rovnoměrně náhodné
$
a
\in\{
2
,
\ldots
,n
-
1
\}
$
a otestovat, zda
$
a
$
je dělitelem~
$
n
$
.
Pokud je, odpovíme, že
$
n
$
je složené. Jinak odpovíme, že
$
n
$
je prvočíslo.
Jak dobrý tento test je? Doběhne vždy v~čase
$
\O
(
b
^
3
)
$
.
Jak dobrý tento test je? Doběhne vždy v~čase
$
\O
(
b
^
2
)
$
.
Pokud odpoví
\Comp
, je to vždy pravda.
Pokud odpoví
\Prime
, může se mýlit.
Pro prvočíslo tedy vždy odpoví
\Prime
, ale pro složené číslo může odpovědět špatně.
...
...
@@ -579,12 +582,13 @@ odpovídá správně a složená čísla prohlašuje za prvočísla s~pravděpod
}
Důkaz je poměrně náročný, naleznete ho například v~knize Computational Number Theory
od Victora Shoupa. Zjednodušenou verzi (pro konstantu
$
1
/
2
$
namísto
$
1
/
4
$
) uvádíme níže.
od Victora Shoupa. Zjednodušenou verzi (pro konstantu
$
1
/
2
$
namísto
$
1
/
4
$
) uvádíme
v~oddílu~
\secref
{
rmproof
}
.
\rem
{
Za~zmínku ještě stojí, že původní Millerův test byl deterministický a pan Miller o~něm
dokázal, že pokud platí rozšířená Riemannova hypotéza, má každé složené číslo svědka
(Fermatova či Riemannova), který je jen logaritmicky velký. Zda
je to pravda, to
se dosud neví,
(Fermatova či Riemannova), který je jen logaritmicky velký. Zda
hypotéza platí,
se dosud neví,
nicméně pan Rabin později nahlédl, že svědků vždy existuje alespoň
$
3
/
4
\cdot
n
$
,
a randomizovaný algoritmus byl na~světě.
}
...
...
@@ -595,8 +599,8 @@ a randomizovaný algoritmus byl na~světě.
generovat náhodná
$
b
$
-bitová čísla (začínající na~1), testovat, zda to jsou
prvočísla, a~opakovat, dokud nedostaneme prvočíslo.
Jak efektivní tento přístup bude? Je známo, že hustota prvočísel okolo~
$
N
$
je přibližně
$
1
/
\ln
N
$
. Tudíž pravděpodobnost, že náhodné
$
b
$
-bitové číslo
Jak efektivní tento přístup bude? Je známo, že hustota prvočísel okolo~
$
n
$
je přibližně
$
1
/
\ln
n
$
. Tudíž pravděpodobnost, že náhodné
$
b
$
-bitové číslo
bude prvočíslem, je
$
\Theta
(
1
/
b
)
$
. Podle lemmatu o~chození se džbánem pro vodu
tedy na prvočíslo narazíme po průměrně
$
\Theta
(
b
)
$
pokusech.
...
...
@@ -665,7 +669,7 @@ Ovšem najdeme-li takové~$j$, dostaneme libovolné $g^k$ jako $g^{ijk} \equiv (
Grupa
$
\Zsp
$
má
$
\varphi
(
p
-
1
)
$
generátorů.
}
Generátory budeme často potřebovat v~případech, kdy
$
p
=
2
q
+
1
$
, kde
$
q
$
je také prvočíslo.
Generátory budeme často potřebovat v~případech, kdy
$
p
=
2
q
+
1
$
a
$
q
$
je také prvočíslo.
Tehdy
$
\varphi
(
p
-
1
)
=
\varphi
(
2
q
)
=
\varphi
(
2
)
\varphi
(
q
)
=
1
\cdot
(
q
-
1
)
=
q
-
1
\approx
p
/
2
$
.
Generátory tedy tvoří přibližně polovinu prvků~
$
\Zsp
$
, takže po průměrně dvou pokusech
nějaký najdeme.
...
...
@@ -756,7 +760,7 @@ Tohle není náhoda:
\theorem
{
V~každém tělese
$
\Zp
$
má prvek 0 právě jednu odmocninu,
$
(
p
-
1
)/
2
$
prvků má dvě odmocniny
(těmto prvkům se říká
\em
{
kvadratické zbytky, QR
}
) a zbylých
$
(
p
-
1
)/
2
$
prvků nemá žádnou
(
tak řečené
\em
{
kvadratické nezbytky
, non-QR
}
).
(
\em
{
kvadratické nezbytky
}
\foot
{
Za tento termín se omlouváme. Smysl moc nedává, ale je tradiční.
}
).
Zvolíme-li libovolný generátor~
$
\Zp
$
, kvadratické zbytky jsou ty prvky, jejichž
diskrétní logaritmy jsou sudé.
}
...
...
@@ -784,7 +788,7 @@ Pro libovolný generátor~$g$ platí $g^{(p-1)/2} \equiv -1$.
}
\proof
$
g
^{
(
p
-
1
)/
2
}$
je odmocnina z~
$
g
^
(
p
-
1
)
\equiv
1
$
. Odmocniny z~jedničky existují
$
g
^{
(
p
-
1
)/
2
}$
je odmocnina z~
$
g
^
{
(
p
-
1
)
}
\equiv
1
$
. Odmocniny z~jedničky existují
dvě: 1 a~
$
-
1
$
. Ovšem 1 to být nemůže, protože by se mocniny generátoru začaly
opakovat dřív, než by vygenerovaly celou~
$
\Zsp
$
.
\qed
...
...
@@ -794,7 +798,7 @@ na kvadratické zbytky:
\theoremn
{
Eulerovo kriterium
}{
Pro
$
x
\in\Zsp
$
je
$
x
^{
(
p
-
1
)/
2
}$
rovno~1, pokud
$
x
$
je kvadratický zbytek,
a~rovno
$
-
1
$
, pokud není
.
a~
jinak
rovno
$
-
1
$
.
}
\proof
...
...
@@ -811,11 +815,11 @@ $$
Pro
$
x
\equiv
g
^{
2
k
+
1
}$
(není kvadratický zbytek), vyjde
$$
\left
(
g
^{
2
k
+
1
}
\right
)
^{
p
-
1
\over
2
}
\equiv
g
^{
2
k
(
p
-
1
)
\over
2
}
\cdot
g
^{
p
-
1
}
\equiv
g
^{
2
k
(
p
-
1
)
\over
2
}
\cdot
g
^{
p
-
1
\over
2
}
\equiv
1
\cdot
(-
1
)
\equiv
-
1
.
$$
\qed
\qed
math
\corr
{
Množina všech kvadratických zbytků tvoří podgrupu~
$
\Zsp
$
.
...
...
@@ -828,7 +832,7 @@ Testovat, zda číslo je kvadratickým zbytkem, lze v~čase $\O(b^3)$.
\subsection
{
Výpočet diskrétních odmocnin
}
Prvočísla existují ve dvou
\uv
{
příchutích
}
:
$
p
=
4
\ell
+
1
$
a
$
p
=
4
\ell
+
3
$
. Je překvapivě,
jak se v~mnoha situacích tyto dva druhy prvočísel chovají
různě
.
jak
různě
se v~mnoha situacích tyto dva druhy prvočísel chovají.
Pokud
$
p
=
4
\ell
+
3
$
, je výpočet diskrétní odmocniny snadný. Pro každý kvadratický zbytek~
$
a
$
totiž platí
$$
...
...
@@ -840,7 +844,7 @@ $$
přičemž poslední rovnost získáme z~Eulerova kriteria.
To znamená, že
$
a
^{
(
p
+
1
)/
4
}$
je odmocninou z~
$
a
$
.
Pro
$
p
=
4
\ell
+
1
$
je situace mnohem složitější. N
ení známý žádný deterministický
Pro
$
p
=
4
\ell
+
1
$
n
ení známý žádný deterministický
algoritmus pro výpočet odmocnin. Existuje Tonelliho-Shanksův randomizovaný algoritmus,
který pracuje v~průměrně polynomiálním čase. Detaily nebudeme potřebovat.
...
...
@@ -849,18 +853,22 @@ který pracuje v~průměrně polynomiálním čase. Detaily nebudeme potřebovat
V~
$
\Zn
$
pro složené~
$
n
$
je situace mnohem složitější. Prozkoumejme nejdřív případ,
$
n
=
pq
$
pro dvě různá prvočísla
$
p
$
a~
$
q
$
. Aby
$
x
^
2
$
bylo kongruentní s~nějakým~
$
a
$
modulo~
$
n
$
, musí s~ním být kongruentní i modulo~
$
p
$
a modulo~
$
q
$
. Hledáme tedy dvojici
$
(
x
_
1
,x
_
2
)
$
takovou, že
$
x
_
1
^
2
\equiv
_
p a
$
a
$
x
_
2
^
2
\equiv
_
q a
$
. A~podle Čínské věty
o~zbytcích odpovídá každá taková dvojice právě jednomu
$
x
\Zn
$
. Pokud jsou
$
a
\bmod
p
$
i
$
a
\bmod
q
$
kvadratické zbytky, získáváme celkem 4 různá~
$
x
$
. Pokud některé z~nich
není kvadratickým zbytkem, žádné~
$
x
$
neexistuje. Ještě se může stát, že jedno z~nich
vyjde nulové, pak najdeme dvě různá~
$
x
$
.
$
(
x
_
1
,x
_
2
)
$
takovou, že
$
x
_
1
^
2
\equiv
_
p a
_
1
$
a
$
x
_
2
^
2
\equiv
_
q a
_
2
$
, kde
$
a
_
1
=
a
\bmod
p
$
a
$
a
_
2
=
a
\bmod
q
$
.
Podle Čínské věty o~zbytcích odpovídá každá taková dvojice právě jedné odmocnině
$
x
\in\Zn
$
.
Každé~
$
a
_
i
$
je buďto~0 (pak existuje právě jedno~
$
x
_
i
$
)
nebo kvadratický zbytek (dvě~
$
x
_
i
$
),
případně kvadratický nezbytek (žádné~
$
x
_
i
$
).
V~závislosti na tom existují 0, 2, nebo~4 dvojice
$
(
x
_
1
,x
_
2
)
$
,
a~tedy stejný počet odmocnin~
$
x
$
.
Toto lze zobecnit pro libovolné složené~
$
n
$
a převést tak odmocňování modulo~
$
n
$
na odmocňování modulo prvočíselné faktory~
$
n
$
, pokud umíme
$
n
$
~faktorizovat.
Žádný efektivní způsob počítání diskrétních odmocnin bez faktorizace~
$
n
$
není znám.
(Možnost, že
$
n
$
může mít násobné faktory, s~dovolením nebudeme zkoumat.)
\sectionstar
{
Rozbor Rabinova-Millerova testu
}
\sectionstar
[rmproof]
{
Rozbor Rabinova-Millerova testu
}
O~Rabinově-Millerově testu již víme, že prvočíslo vždy prohlásí za~prvočíslo
a že složené číslo, které není Carmichaelovo, usvědčí s~pravděpodobností alespoň
$
1
/
2
$
.
...
...
@@ -872,7 +880,8 @@ Nyní dokážeme, že je to pravda i pro Carmichaelova čísla. Nejprve si přip
\proof
Uvažujme libovolné
$
n
=
p
^
e
$
, kde
$
p
$
je prvočíslo a
$
e>
1
$
.
Zvolíme
$
a
=
1
+
p
^{
e
-
1
}$
a podle binomické věty spočteme
$
a
^
p
$
(vše počítáme v~
$
Z
^
*
_
n
$
, kam~
$
a
$
jistě patří):
Zvolíme
$
a
=
1
+
p
^{
e
-
1
}$
, což je jistě nesoudělné s~
$
n
$
.
Podle binomické věty spočteme
$
a
^
p
$
(vše počítáme v~
$
\Zn
$
, kde je~
$
a
$
invertibilní):
$$
a
^
p
\equiv
(
1
+
p
^{
e
-
1
}
)
^
p
\equiv
{
p
\choose
0
}
\cdot
1
\cdot
1
+
{
p
\choose
1
}
\cdot
1
\cdot
p
^{
e
-
1
}
+
{
p
\choose
2
}
\cdot
1
\cdot
p
^{
2
(
e
-
1
)
}
+
\ldots
+
{
p
\choose
p
}
\cdot
1
\cdot
p
^{
p
(
e
-
1
)
}
\equiv
1
$$
...
...
@@ -881,7 +890,7 @@ Proto také $a^n \equiv (a^p)^e \equiv 1$. Tedy $a^{n-1} \equiv a^{-1} \not\equi
takže
$
n
$
není Carmichaelovo.
\qed
Nyní
uvažujme, kdy může Rabinův-Millerův test odpovědět, že číslo je prvočíslem. Stane
Teď
uvažujme, kdy může Rabinův-Millerův test odpovědět, že číslo je prvočíslem. Stane
se tak buď v~kroku~
\itemref
{
rmallone
}
(všechna
$
b
_
0
,
\ldots
,b
_
t
$
jsou jedničky, což nastane, kdykoliv
$
b
_
0
\equiv
1
$
)
nebo v~kroku~
\itemref
{
rmmone
}
(nějaké
$
b
_
i
\equiv
-
1
$
a
$
b
_{
i
+
1
}
\equiv\ldots\equiv
b
_
t
\equiv
1
$
). Rozebereme
postupně oba případy.
...
...
@@ -909,8 +918,9 @@ ani $a^m\equiv_n\nobreak 1$.
\qed
Nyní se přesuneme ke~kroku~
\itemref
{
rmmone
}
. Z~předchozího lemmatu víme, že pro některé volby čísla~
$
a
$
v~algoritmu
je
$
b
_
0
\not\equiv
1
$
. Můžeme proto zvolit~
$
i
$
(
$
0
\le
i<t
$
) takové, že
$
b
_{
i
+
1
}
\equiv
a
^{
2
^{
i
+
1
}
m
}
\equiv
1
$
pro všechna možná~
$
a
\in\Z
_
n
$
, ale
$
b
_
i
\equiv
a
^{
2
^
im
}
\not\equiv
1
$
pro alespoň jedno takové~
$
a
$
. Jakmile dokážeme,
je
$
b
_
0
\not\equiv
1
$
, ale pro všechna~
$
a
\in\Zsn
$
je
$
b
_
t
\equiv
1
$
.
Můžeme proto zvolit~
$
i
$
(
$
0
\le
i<t
$
) takové, že
$
b
_{
i
+
1
}
\equiv
a
^{
2
^{
i
+
1
}
m
}
\equiv
1
$
pro všechna možná~
$
a
\in\Zsn
$
, ale
$
b
_
i
\equiv
a
^{
2
^
im
}
\not\equiv
1
$
pro alespoň jedno takové~
$
a
$
. Jakmile dokážeme,
že
$
b
_
i
\not\equiv\pm
1
$
pro alespoň polovinu z~možných~
$
a
$
, máme vyhráno.
\lemma
{
...
...
@@ -947,15 +957,15 @@ tak prvočíslo za~složené. Bude fungovat následovně:
\:
Pokud pro nějaké~
$
i
$
je
$
r
_
i
\not\equiv\pm
1
$
, odpovíme
\Comp
.
\:
Pokud pro všechna~
$
i
$
je
$
r
_
i
=
1
$
, odpovíme
\Comp
.
\:
Jinak odpovíme
\Prime
.
\end
list
\end
algo
Nejprve si všimneme, že algoritmus běží v~polynomiálním čase. Největší společné dělitele
a mocniny modulo~
$
n
$
už polynomiálně umíme počítat, jediný problematický krok je ten první.
V~něm ale stačí zkoušet všechny možné exponenty (těch je
$
\O
(
\log
n
)=
\O
(
b
)
$
, jelikož základ je alespoň~
$
2
$
)
a pro každý exponent
hledat pomocí půlení intervalu
odmocninu (opět
$
\O
(
b
)
$
kroků).
a pro každý exponent
binárně vyhledávat
odmocninu (opět
$
\O
(
b
)
$
kroků).
Nyní nahlédněme, jak algoritmus probíhá pro prvočísla. První ani třetí krok prvočíslo neodmítnou,
pátý také ne, jediný problém může nastat v~šestém kroku.
Již víme, ž
e
$
r
_
i
=
1
$
právě tehdy, má-li
$
a
_
i
$
druhou odmocninu,
pátý také ne, jediný problém může nastat v~šestém kroku.
Podle Eulerova kriteria j
e
$
r
_
i
=
1
$
právě tehdy, má-li
$
a
_
i
$
druhou odmocninu,
a~to nastane s~pravděpodobností
$
1
/
2
$
. Šestý krok tedy odpoví
{
\csc
složené
}
jen tehdy,
když jsou všechna
$
a
_
i
$
odmocnitelná, pravděpodobnost čehož je
$
1
/
2
^
t
$
.
...
...
@@ -972,21 +982,21 @@ obsahuje nejvýše $\vert \Z_n^*\vert/2$ prvků.
\proof
Podobně jako u~Fermatova testu:
Všimneme si, že
$
S
_
n
$
je podgrupa
$
\Z
_
n
^
*
$
, takže zbývá dokázat, že je to podgrupa netriviální,
a použít Lagrangeovu větu. Najdeme číslo~
$
b
$
, které nebude ležet v~
$
S
_
n
$
.
a použít Lagrangeovu větu. Najdeme číslo~
$
c
$
, které nebude ležet v~
$
S
_
n
$
.
Nechť
$
n
$
má prvočíselný rozklad
$
p
_
1
^{
k
_
1
}
\cdot\ldots\cdot
p
_
s
^{
k
_
s
}$
. Již víme, že
$
s
\ge
2
$
. Označme
$
q
=
p
_
1
^{
k
_
1
}$
a
$
m
=
n
/
q
$
. Jelikož
$
q
\divs
n
$
i
$
m
\divs
n
$
, musí být pro každý prvek
$
x
\in
S
_
n
$
jak
$
x
^{
(
n
-
1
)/
2
}
\equiv
_
q
\pm
1
$
, tak
$
x
^{
(
n
-
1
)/
2
}
\equiv
_
m
\pm
1
$
a znaménka obou zbytků jsou stejná.
Kýžené číslo~
$
b
$
zvolíme tak, aby pro něj platilo
$
b
\equiv
_
q a
$
a současně
$
b
\equiv
_
m
1
$
(Čínská věta o~zbytcích nám jeho existenci zaručuje, jelikož
$
q
\perp
m
$
).
Kýžené číslo~
$
c
$
zvolíme tak, aby pro něj platilo
$
c
\equiv
_
q a
$
a současně
$
c
\equiv
_
m
1
$
(Čínská věta o~zbytcích nám jeho existenci zaručuje, jelikož
$
q
\perp
m
$
).
Snadno ověříme, že platí:
$$
\eqalign
{
b
^{
(
n
-
1
)/
2
}
&
\equiv
_
q a
^{
(
n
-
1
)/
2
}
\equiv
_
q
-
1
,
\cr
b
^{
(
n
-
1
)/
2
}
&
\equiv
_
m
1
.
\cr
c
^{
(
n
-
1
)/
2
}
&
\equiv
_
q a
^{
(
n
-
1
)/
2
}
\equiv
_
q
-
1
,
\cr
c
^{
(
n
-
1
)/
2
}
&
\equiv
_
m
1
.
\cr
}$$
Takové
$
b
$
ovšem neleží v~
$
S
_
n
$
, protože jak už jsme pozorovali, pro každý prvek z~
$
S
_
n
$
jsou zbytky po~dělení
$
q
$
a
$
m
$
stejné
a my
jsme si~
$
b
$
zvolili tak, aby byly různé.
Takové
$
c
$
ovšem neleží v~
$
S
_
n
$
, protože jak už jsme pozorovali, pro každý prvek z~
$
S
_
n
$
jsou zbytky po~dělení
$
q
$
a
$
m
$
stejné
, zatímco
jsme si~
$
c
$
zvolili tak, aby
zbytky
byly různé.
\qed
Náš algoritmus tudíž selže jedině tehdy, když
$
a
_
2
,
\ldots
,a
_
t
$
padnou všechna do~
$
S
_
n
$
,
...
...
This diff is collapsed.
Click to expand it.
tex/adsmac.tex
+
1
−
1
View file @
aef897af
...
...
@@ -156,7 +156,7 @@
\def\Zp
{{
\bb
Z
}_
p
}
\def\Zsp
{{
\bb
Z
}^
*
_
p
}
\def\Zn
{{
\bb
Z
}_
n
}
\def\Zsn
{{
\bb
Z
}^
*
_
p
}
\def\Zsn
{{
\bb
Z
}^
*
_
n
}
\def\divs
{
\mathbin\backslash
}
\def\inv
{^{
-1
}}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment