1 ALGORITMY 1 ALGORITMY TEORIE ČÍSEL Radan Kučera verze 15. února 2010 Literatura [Ca] Cassels J. W. S.: An Introduction to Diophantine Approximation, University Press, Cambridge, 1965. [C] Cohen H.: A Course in Computational Algebraic Number Theory, Graduate Texts in Mathematics 138, Springer-Verlag, Berlin, Heidelberg, New York 1993, kapitoly 8-10, (čtvrtý aktualizovaný výtisk 2000). [D] Dietzfelbinger M., Primality Testing in Polynomial Time (From Randomized Algorithms to "Primes is in P"), LNCS 3000, Springer-Verlag Berlin, Heidelberg, New York 2004. [K] Knuth D.E., The Art of Computer Programming, díl 2: Seminumerical Algorithms, (druhé vydání), Addison-Wesley, Reading, Mass., 1981. [L] Lenstra A. K., Lenstra H. W. Jr.: Algorithms in Number Theory, v Handbook of Theoretical Computer Science, kapitola 12, Elsevier Science Publishers B.V, 1990. [R] Rosický J., Algebra, 4. vydání, skriptum MU, 2002. Úvod Cílem této přednášky je ukázat, jak silné a účinné jsou prostředky, založené na výsledcích teorie čísel, při řešení některých matematických problémů. Protože jsem se nechtěl této problematice věnovat jen povrchně, ale přitom jsem měl k disposici jen jeden semestr, bylo třeba se zaměřit pouze najeden problém a v tomto problému se dostat dost hluboko. Při rozhodování, kterému problému se věnovat, jsem vyloučil ty problémy, které se objevují při stavbě teorie čísel samotné, neboť jsem chtěl dokumentovat její užitečnost i pro ostatní matematiku. Proto jsem si nakonec zvolil problém na první pohled banálně jednoduchý, na který se však narazí na samém počátku budování přirozených čísel a který se objevuje už ve školském učivu: rozkládání přirozeného čísla na prvočinitele. Jde o problém skutečně velmi jednoduchý, máme-li na mysli „malá" přirozená čísla, avšak pro „velká" přirozená čísla (mající řekněme 50 - 100 dekadických cifer) všechny „naivní" metody selhávají. Přesto však byly objeveny „rafinované" metody založené právě na výsledcích teorie čísel, které jsou schopny i tato „velká" přirozená čísla rozložit. A právě těmto metodám bude tato přednáška věnována. Přitom budeme využívat hlavně knihu [C]. 1 Algoritmy Obsahem této přednášky není definovat, co to je algoritmus, a ani to nebudeme potřebovat. Přesto si však blíže určeme, co budeme algoritmem rozumět: je to metoda, která pro jistý typ vstupů dává po konečné době odpověď. Jestliže zadáváme algoritmus, je třeba provést několik dalších věcí: 1. Dokázat jeho správnost, tj. ukázat, že dává skutečně požadovaný výsledek poté, co se zastaví. 1 ALGORITMY 2 2. Protože se zajímáme o praktické implementace, je třeba dát odhad, jak dlouho algoritmus poběží, je-li to možné, odhadnout čas pro nejhorší případ a také v průměru. Zde je třeba být opatrný: čas výpočtu budeme měřit vždy v bitových operacích, tj. počtem logických a aritmetických operacích prováděných na nulách a jedničkách. To je totiž nejrealističtější model, předpokládáme-li, že používáme skutečné počítače. 3. Je třeba odhadnout i paměťovou náročnost algoritmu (měřenou v bitech). U většiny algoritmů je tato náročnost zanedbatelná a není nutné se jí zabývat, mnohdy to však může být důležité. Pro potřeby časové náročnosti budeme velikost vstupů měřit počtem bitů, které jsou zapotřebí pro jejich zápis (např. pro vstup přirozeného čísla N je třeba 1 + [log2 N] bitů). Definice. Nechť {an)r^=l, {bn)r^'=l jsou posloupnosti. Řekneme, že posloupnost (on)^Li Je řádu 0(bn), jestliže platí cin — < oo. bn Řekneme, že posloupnost {an)r^'=l je řádu o(bn), jestliže existuje lim — = 0. ra^oo bn Protože se budeme zabývat algoritmy, jejichž cílem je rozložit přirozené číslo na prvo-činitele, můžeme předpokládat, že vstupem pro náš algoritmus je jediné přirozené číslo N. V obecnějším případě by bylo třeba nahradit v následující definici lniV počtem bitů potřebných pro zapsání celého vstupu. Abychom předešli nedorozumění v následující definici, zmiňme, že lnfciV znamená (lniV)fc. Definice. Řekneme, že algoritmus je polynomiálního času, jestliže čas, po který algoritmus pobčží, najde-lí na vstupu přirozené číslo N, je řádu o(ln N) pro nčjaké přirozené číslo k. Řekneme, že algoritmus je lineárního (resp. kvadratického, resp. kubického) času, je-li tento čas řádu O(lniV), (resp. O (In2 N), resp. O (In3 N)). Je-li tento čas řádu o(Na) pro každé kladné reálné číslo a a přitom algoritmus není polynomiálního času, řekneme, že algoritmus je sub exponenciálního času. Konečné, jestliže existují kladná reálná čísla a > ß tak, že tento čas je řádu 0(Na), ale není řádu 0(N13), řekneme, že algoritmus je exponenciálního času. Příklad. Později se setkáme s algoritmy, jejichž čas je řádu q/ c(lriN)a(lnlriN)b\ kde a, b, c jsou kladná reálná čísla, přičemž a + b = 1. Ověřte si, že tyto algoritmy jsou subexponenciálního času. Uvedená „definice" algoritmu, ačkoli je značně vágní, je přesto často příliš striktní pro praktické účely. Budeme také potřebovat „pravděpodobnostní algoritmy", jejichž běh závisí na jistém zdroji náhodných čísel. Takový „algoritmus" by vlastně ani algoritmem nazýván být neměl, protože je zde možnost (pravděpodobnosti nula), že nikdy neskončí. Zkušenosti však ukazují, že tyto „pravděpodobnostní algoritmy" jsou často efektivnější než ostatní a mnohdy jsou jediné, které máme k disposici. Na druhé straně rozhodně nebudeme nazývat algoritmem metodu, produkující výsledek, který je s vysokou pravděpodobností správný. Je lim sup n—>oo 2 POČÍTÁNÍ S VELKÝMI ČÍSLY 3 podstatné, že algoritmus dává správné výsledky (odhlédneme-li od chyb člověka či počítače při jeho provádění). Příklad. V posluchárně si nechám nadiktovat od několika posluchačů postupně 100 cifer. Pak odpovím, že vzniklé stociferné číslo není druhou mocninou přirozeného čísla. Asi budu mít pravdu, protože mezi 9 • 10" stocifernými čísly je jen asi 1050 — 1049 • \/lÖ = 6, 84 • 1049 druhých mocnin přirozených čísel, tedy pravděpodobnost neúspěchu je menší než 10~50, pokud předpokládáme, že posluchači volí cifry náhodně, a tedy že každé stociferné číslo mohu dostat se stejnou pravděpodobností. Přesto však nemůže být řeči o algoritmu. Je vhodné si uvědomit, že u pravděpodobnostních algoritmů nemá smysl hovořit o nejdelším možném času výpočtu, ale o očekávaném času výpočtu. 2 Počítání s velkými čísly Velice často budeme potřebovat provádět výpočty s celými čísly, jejichž absolutní hodnota je značně velká. Proto budeme předpokládat, že máme k disposici software, ve kterém je možné provádět základní algebraické operace s čísly, majícími řekněme 1000 dekadických cifer. Nejznámější systémy, které takové výpočty umožňují, jsou asi MATHEMATICA a MAPLE, jejichž nevýhodou je, že jsou komerční a jsou poměrně drahé. Méně známý systém je PAFíI-GP, který je zaměřen na teorii čísel. Je volně šiřitelný a je ho tedy možné získat zdarma. Pro získání představy o časové náročnosti jednotlivých operacích je však vhodné si představit, že systém umožňující operace s libovolně velkými celými čísly máme vytvořit. Taková čísla budeme zapisovat v poziční soustavě o vhodném základu a operace budeme provádět podobně jako jsme to zvyklí dělat na papíře s dekadickými čísly. Je zřejmé, že lineární časovou náročnost bude mít sčítání a odčítání, dále pak násobení „malým" přirozeným číslem a násobení či dělení se zbytkem mocninou zvoleného základu. Naproti tomu kvadratickou časovou náročnost bude mít obecné násobení a dělení se zbytkem. Pokud se týká vstupu a výstupu, časová závislost je lineární nebo kvadratická v závislosti na tom, zda zvolený základ je či není mocninou deseti. Protože pro aritmetické operace je výhodnější, je-li základ zvolené poziční sopustavy mocnina dvou, je tato volba nejvhodnější. Obvykle totiž čas potřebný pro vstup a výstup je pouze zanedbatelná část celkové doby výpočtu a obvykle je dominován časem pro fyzický zápis. Pro zajímavost si uveďme, že v PARI-GP je základem mocnina dvou, kdežto MAPLE používá mocninu deseti. Uveďme si ještě, že jsou známy algoritmy pro násobení a dělení ^bitových čísel, které dosahují menší časové náročnosti než „metoda tužky a papíru". Nejlepší z nich, kterou objevili Schönhage a Strassen, vyžaduje jen 0(n ■ In n ■ In In n) bitových operací. Avšak tyto rafinované metody jsou rychlejší až pro čísla mající několik set dekadických cifer a více. S takovými čísly je však třeba pracovat jen zřídka a proto se patrně implementace těchto metod nevyplatí. 3 Největší společný dělitel Často budeme potřebovat spočítat největší společný dělitel dvou celých čísel. Naivní řešení by bylo: rozlož obě čísla na součin prvočísel a poté vynásob společné činitele. Ale to je postup, který se osvědčí jen pro čísla s velmi malou absolutní hodnotou (řekněme do 100) nebo v případě, že víme, že některé z daných čísel je prvočíslo a stačí tedy provést jen jedno dělení se zbytkem. Mnohem výhodnější je výpočet největšího společného dělitele pomocí Euklidova algoritmu, který je patrně nejstarší a nejdůležitější algoritmus teorie čísel. 3 NEJVĚTŠÍ SPOLEČNÝ DĚLITEL 4 Algoritmus (Euklidův). Pro daná nezáporná celá čísla a, b algoritmus najde jejich největší společný dělitel. 1. [Jsi hotov?] Je-li 6 = 0, pak vytiskni a jako odpověď a skonči. 2. [Euklidovský krok] Polož r <— a mod 6, a <— 6, 6 <— r a jdi na 2. Pro určení časové náročnosti je třeba vědět, kolikrát se provede Euklidovský krok. Platí následující věta l Věta. 1. Je-li l 0, polož a <— ŕ, jinak polož 6 <-----ŕ a jdi na 4. Důkaz je možno najít v knize [K]. 3 NEJVĚTŠÍ SPOLEČNÝ DĚLITEL 5 Je jasné, že počet opakování kroků 4 a 5 je 0(\xiab) (po každém průchodu se součin ab zmenší na méně než polovinu), odčítání i posuv jsou lineárního času, tedy opět jde o algoritmus kvadratického času. Je ovšem nezbytné všechna dělení dvěma provádět jako posuvy. Označíme-li d největší společný dělitel celých čísel a, 6, pak existují celá čísla u, v tak, že d = ua + vb (Bezoutova rovnost). V některých aplikacích budeme potřebovat spočítat nejen d, ale i čísla u, v, proto si uveďme algoritmus pro jejich výpočet. Algoritmus (Rozšířený Euklidův). Pro daná nezáporná celá čísla a, b algoritmus najde trojici celých čísel (u,v,d) takovou, že d je největší společný dělitel čísel a, b a platí d = ua + vb. 1. [Inicializace] Polož u <— 1, d <— a. Je-li 6 = 0, polož v <— 0, vytiskni (u,v,d) jako odpověď a skonči. Jinak polož v\ <— 0 a v3 <— 6. 2. [Jsi hotov?] Je-li v3 = 0, pak polož v <— ^y^, vytiskni (u, v, d) jako odpověď a skonči. 3. [Euklidovský krok] Současně spočítej q <— [^-] a t3 <— dmoďč^. Pak polož t\ <— u — qv\, u <— Vi, d <— i>3, i>i <— íi, W3 <— í3 a jdi na 2. Poznamenejme, že „současně" v kroku 3 poukazuje na to, že obvykle instrukce „dělení se zbytkem" dává jak podíl tak i zbytek, ať už je to instrukce z assembleru nebo z nějakého softwaru pracujícího s velkými čísly. Hodnota zlomku v kroku 2 je celočíselná. Důkaz algoritmu. Uvědomme si, že výpočty v proměnných d, v?J} Í3 nezávisí na hodnotách ostatních proměnných. Přeznačíme-li je a, 6, r, dostaneme právě Euklidův algoritmus, proto náš algoritmus musí skončit a po skončení je v d hledaný největší společný dělitel. Zbývá dokázat, že pak také platí au + bv = d. Za tím účelem rozšiřme daný algoritmus tak, že zavedeme další proměnné v2, t2, v (které nebudou ovšem nikdy použity pro výpočet hodnot původních proměnných). Rozšiřme inicializační krok 1 o íi <— 0, Í2 <— 0, Í3 <— 0, v <— 0, V2 <— 1 a krok 3 o Í2 <— v — qv2, v <— V2, V2 <— Í2- Po skončení kroku 1 platí aíi + 6Í2 = Í3, au + bv = d, av\ + 6^2 = ^3- (1) Dokážeme indukcí, že (1) platí vždy, když začínáme krok 2. Zbývá ověřit, že platilo-li (1) před krokem 3, platí (1) i po něm. Abychom zabránili zmatku, budeme v důkaze nově získané hodnoty proměnných označovat čárkami. Pro q = [—] platí: ť3 = d - qv3 t[ = u — qv\ u! = V\ ď = v3 v[ = u — qv\ v'3 = d- qv3 ť2 = v — qv2 v' = v2 v'2 = v- qv2 Předpokládáme tedy, že (1) platí pro nečárkované proměnné a dokážeme ji pro čárkované: at\ + 6ť2 = a(u — qv\) + b (v — qv2) = au + bv — q{av\ + bv2) = d — qv3 = ť3 au' + bv' = av\ + bv2 = v3 = ď av[ + bv'2 = a(u — qv\) + b (v — qv2) = (au + bv) — q(av\ + bv2) = d — qv3 = v'3 4 NEZBYTNÝ APARÁT Z ALGEBRY A ELEMENTÁRNÍ TEORIE ČÍSEL 6 Dokázali jsme, že algoritmus je správný. Snadno se vidí, že oproti původnímu Euklidovu algoritmu v cyklu přibylo 1 odčítání, 1 (dlouhé) násobení a 2 přiřazení, cyklus nyní trvá asi dvakrát déle než v předchozím algoritmu. Proto i celý rozšířený Euklidův algoritmus trvá asi dvojnásobek času potřebného pro Euklidův algoritmus. Jde tedy opět o algoritmus kvadratického času. 4 Nezbytný aparát z algebry a elementární teorie čísel V této kapitole zopakujeme aritmetiku okruhu zbytkových tříd Z/mZ, kde m E N (užíváme standardního značení: Z značí množinu či okruh celých čísel, N množinu či polookruh čísel přirozených, (a,b) je označení největšího společného dělitele celých čísel a, b). Přestože byla v algebře teorie faktorizace okruhů podle ideálů jistě probrána a mohl jsem tedy okruh zbytkových tříd popisovat jako speciální případ faktorokruhu, rozhodl jsem se pro elementárnější výklad pomocí kongruencí s tím, že se občas zmíníme o ekvivalentním tvrzení pro okruhy zbytkových tříd. Zdá se mi totiž jednodušší hovořit například o kongruencích vzhledem ke dvěma modulům než o dvou okruzích zbytkových tříd a vztazích mezi nimi (porovnej např. obsah věty 2). Důkazy vět, které jsou zřejmé, budu vynechávat. Definice. Nechť m E N, a, b E Z. Řekneme, že a je kongruentní s b podle modulu m, píšeme a = b (modm), jestliže m\a — b. Věta 1. Necht m E N, a,b,c,d E Z. Jestliže a = b (modm), c = d (modm), pak platí a + c = b + d (modm), a — c = b — d (modm), ac = bd (modm). Je jasné, že a = b (mod m) znamená právě to, že celá čísla a, b jsou obsažena v téže třídě rozkladu Z/mZ. Kongruence modulo m jsou tedy totéž co rovnosti v okruhu zbytkových tříd Z/mZ (předchozí věta neříkala nic jiného než to, že na rozkladu Z/mZ bylo možno zavést operace sčítání, odčítání a násobení pomocí reprezentantů). Věta 2. Nechť m, k E N, a, b E Z. Pak platí a = b (mod m) právě tehdy, když ak = bk (mod mk). Věta 3. Necht m E N, a, b, k E Z. Jestliže ak = bk (mod m) a navíc (m, k) = 1, pak platí a = b (mod m). Vzhledem k tomu, že (Z/mZ) je konečný okruh, z předchozí věty snadno plyne, že v Z/mZ jsou jednotkami (tj. invertibilními prvky) právě třídy obsahující čísla nesoudělná s m. Důkaz. Podle Bezoutovy rovnosti existují ŕ, r G Z tak, že platí tm + rk = 1. Vynásobte tuto rovnost číslem a — b a dokažte, že m dělí levou stranu. Věta 4. Nechť a, b E Z. Pak existuje x E Z splňující kongruenci ax = b (mod m) právě tehdy, když (a,m)\b. Důkaz. Jestliže (a,m)\b, vynásobte Bezoutovu rovnost pro (a,m) číslem t^t. Opačný směr je zřejmý. Věta 5 (Čínská zbytková věta). Nechť mi,m2 E N, (mi,m2) = 1. Pak pro libovolná X\,X2 E Z existuje x E Z splňující x = x\ (modrri\), x = X2 (modr/7,2). Důkaz. Podle Bezoutovy rovnosti existují a, b E Z tak, že platí arri\ + 6m2 = 1. Položte x = X2am\ + xibm.2- Definice (Eulerova funkce tp). Pro libovolné m G N je s. Je-li r = s + ke pro vhodné k E N, platí aľ = as ■ (ae)k = as (mod777). Naopak, předpokládejme aľ = as (mod777). Protože je (a,m) = 1, plyne odtud aľ~s = 1 (mod777). Vydělme r — s číslem e se zbytkem: existují q, z E Z, 0 < z < e, splňující r — s = qe + z. Pak platí az = (ae)q ■ az = ar~s = 1 (mod777) a tedy z = 0 podle definice čísla e. Odtud r = s (mode). Definice. Číslo e z předchozí věty se nazývá řád čísla a modulo m. Je to vlastně řád prvku a + 777Z v grupě (Z/mZ)x. Věta 10. Charakteristika konečného tělesa je prvočíslo. Věta 11. Buď R konečné těleso charakteristiky p. Pak počet prvků tělesa R je mocninou prvočísla p. Důkaz. Viz [R], důsledek 12.2, str. 118. Věta 12. Nechť p je prvočíslo a n E N. Pak existuje těleso o pn prvcích. 4 NEZBYTNÝ APARÁT Z ALGEBRY A ELEMENTÁRNÍ TEORIE ČÍSEL 8 Důkaz. Viz [R], věta 12.3, str. 118. Věta 13. Libovolná dvě konečná tělesa o stejném počtu prvků jsou izomorfní. Důkaz. Viz [R], věta 12.5, str. 119. Definice. Pro libovolné prvočíslo p a libovolné n E N označme ¥pn těleso o pn prvcích. Poznámka. Pro libovolné prvočíslo p je Z/pZ těleso o p prvcích, můžeme tedy přímo položit ¥p = Z/pZ. Naproti tomu Z/praZ pro n > 1 není těleso, proto ¥pn není izomorfní s Z/praZ. Těleso ¥pn lze sestrojit takto: zvolíme libovolný normovaný ireducibilní polynom h E ¥p[x] stupně n (to, že takový polynom existuje pro každé prvočíslo p a každé přirozené číslo n, lze dokázat pomocí vět 12 a 14) a ¥pn konstruujeme jako faktorokruh okruhu polynomů ¥p[x] podle ideálu generovaného polynomem h. Pak třída rozkladu obsahující polynom x je kořenem polynomu h v ¥pn. Věta 14. Buď R konečné těleso o pn prvcích. Pak Rx je cyklická grupa o pn — 1 prvcích. Každý prvek r E R je jednoduchým kořenem polynomu xp" — x E ¥p[x]. Důkaz. Pro tvrzení o cykličnosti Rx viz [R], věta 6.9, str. 88. Protože Rx = R — {0}, platí \RX | = pn — 1 a podle [R], věta 7.10, str. 39 pro každé r E Rx platí rp"-1 = 1. Polynom xpTÍ — x nemá násobné kořeny, protože jeho derivace —1 žádné kořeny nemá. Důsledek. Bud R konečné těleso o pn prvcích. Pak pro každé přirozené číslo d \ n kořeny polynomu xp — x E ¥p[x] tvoří podtěleso tělesa R majícípd prvků. Jiná podtělesa těleso R nemá. Definice. Nechť m E N. Existuje-li g E Z nesoudělné s m s vlastností g1 ^ 1 (mod m) pro všechna i = 1,2,..., = 1 (modm). Proto g je primitivní kořen modulo m, právě když řád g modulo m je roven (p{m). Je tedy g primitivní kořen modulo to, právě když třída obsahující g je generátor grupy (Z/mZ)x. Pak ovšem pro každé celé číslo a nesoudělné s to existuje celé číslo 0 < i < 3, že platí ^(p-iy-3 = 1 + rpfc-2 (modpfc-i)_ (*) Pro k = 3 to víme z konstrukce r (platí dokonce rovnost). Indukční krok dostaneme aplikací předchozího lemma, neboť z binomické věty (1 + rpk~2f = 1 + rpk~l (modpfc) díky p | p • Pjy~ = (2) a nerovnostem 1 + 2{k — 2) > k a 3(fc — 2) > fc. Dokážeme nyní indukcí vzhledem k n G N, že g je primitivní kořen modulo pn. Pro n = 2 to je platný předpoklad, pro n = 1 to snadno dokážeme sporem: kdyby pro nějaké přirozené číslo i < p — 1 platilo g% = 1 (modp), pak z lemma gv% = 1 (modp2), a tedy g by nebyl primitivní kořen modulo p2, spor. Nechť tedy n > 2 a již bylo dokázáno, že g je primitivní kořen modulo pn~l. Označme e řád čísla g modulo pn, jistě platí e | 1. PaA; n je prvočíslo, právě když platí (n — 1)! = —1 (mod n). Důkaz. Je-li n složené nebo n = 2, je tvrzení zřejmé. Nechť je tedy n liché prvočíslo a označme g primitivní kořen modulo n. Pak platí (p*™-1) = — 1 (modn), neboť nlg^-1^ — 1 = (0Í(»-i) _ l)^!^-1) + 1) a n f (^i^-1) - 1). Odtud plyne n-2 (n- 1)! = J]V = 0é(»-i)(»-2) = (_i)"-2 = _! (modn). 5 Rozklad přirozeného čísla na součin prvočísel Přistupme nyní k základnímu problému celé naší přednášky, totiž k rozkládání přirozeného čísla na prvočinitele. Celý problém můžeme rozdělit na tři úkoly: 1. Je-li dáno přirozené číslo N, rychle rozhodnout, zda N splňuje nějakou podmínku, která je splněna každým prvočíslem, a tedy rozhodnout, zda je to určitě číslo složené anebo zda je to asi prvočíslo (tzv. test na složenost). 2. Víme-li, že N je asi prvočíslo, dokázat, že N skutečně prvočíslem je, nebo to vyvrátit (tzv. test na prvočíselnost). 3. Víme-li, že je N složené, nalézt netriviálního dělitele d čísla N. Celé rozkládání je pak rekurzivní proces: máme-li dělitele d čísla N, který splňuje 1 < d < N, opakujeme celý postup pro čísla daf. 5 ROZKLAD PŘIROZENÉHO ČÍSLA NA SOUČIN PRVOČÍSEL 10 Než přejdeme k rafinovanějším metodám, je vhodné se zastavit u naivní metody, ve které zkoušíme dělit N postupně všemi prvočísly 2, 3, 5, 7, 11, ... až do jisté hranice. Pokud jsme schopni to provést pro všechna prvočísla nepřevyšující \/Ň, provedeme tím všechny tři úkoly současně. Avšak i v případě, kdy N je natolik velké, že dělení N všemi prvočísly nepřevyšujícími yN by bylo příliš zdlouhavé, bývá výhodné zkoušet dělit N všemi prvočísly až do jisté hranice, abychom se zbavili malých faktorů (uvědomte si, že čím je prvočíslo menší, tím větší je pravděpodobnost, že dělí náhodně zvolené přirozené číslo). Budeme předpokládat, že máme uloženu tabulku prvočísel p[l] = 2, p[2] = 3, p[3] = 5, p[4] = 7, ..., p[k]. Po vyčerpání této tabulky budeme pokračovat v dělení N čísly z jistých zbytkových tříd (např. čísly dávajícími zbytek 1 nebo 5 po dělení 6, resp. čísly dávajícími zbytek 1, 7, 11, 13, 17, 19, 23 nebo 29 po dělení 30 apod.). Tím sice některá dělení provedeme zbytečně, ale výsledek bude stále správný (testovat, zda číslo, kterým hodláme dělit, je prvočíslo, pochopitelně nemá smysl). Algoritmus (Pokusné dělení). Nechť je dána tabulka prvočísel p[l] = 2, p[2] = 3, p[3] = 5, p[4] = 7, ..., p[k] (kde k > 3), vektor t = [6, 4, 2, 4, 2, 4, 6,2], a číslo j takové, že j = 0 (resp. 1, 2, 3, 4, 5, 6, 7) právě tehdy, když p[k] po dělení 30 dává zbytek 1 (resp. 7, 11, 13, 17, 19, 23, 29). Konečně, mějme zvolenu horní hranici B > p[k] (v podstatě proto, abychom algoritmem neztratili příliš mnoho času). Pro dané přirozené číslo N algoritmus hledá úplný rozklad N a jestliže se mu to nepodaří, v nalezeném rozkladu největší činitel může být dělitelný pouze prvočísly většími než B a všichni ostatní činitelé jsou prvočísla. 1. [Inicializace] Je-li N < 5, pak vytiskni odpovídající rozklad N a skonči. Jinak polož i <------1, m^O, l <- [y/Ň]. 2. [Další prvočíslo] Polož m <— m + 1. Je-li m > k, polož i <— j — 1 a jdi na 5, jinak polož d <— p[rn\. 3. [Zkus dělit] Polož r <— N mod d. Je-li r = 0, vytiskni d jako činitele v hledaném rozkladu a polož N <— ^j, l <— [VŇ] a opakuj krok 3. 4. [Prvočíslo?] Je-li d> l, vytiskni N jako posledního činitele a zprávu, že rozklad je úplný a skonči. Jinak, je-li i < 0, jdi na 2. 5. [Další dělitel] Polož i <— (i + l) mod 8, d <— d + t[i]. Je-li d > B, vytiskni N jako posledního činitele a zprávu, že poslední činitel v rozkladu nemusí být prvočíselný, avšak může být dělitelný jen prvočísly většími než B a skonči. Jinak jdi na 3. Poznámky k algoritmu. V průběhu výpočtu je i = — 1, dokud používáme naši tabulku prvočísel, pak už je stále i > 0. Důkaz algoritmu neuvádíme pro jeho jednoduchost. Tento algoritmus by neměl být používán pro úplný rozklad N, pokud A^ není malé (řekněme Af < 108), protože pro větší A^ existují lepší metody. Na druhé straně je užitečný pro odstranění malých faktorů. Vhodnou tabulkou prvočísel by mohla být tabulka prvočísel menších než 500 000, máme-li na ni dost místa v paměti (je to 41538 prvočísel). Vhodnější než uložení vlastních prvočísel je uložení diferencí mezi nimi nebo dokonce poloviny diferencí (diferenci p[k] — p[k — 1] můžeme uložit do jednoho bytu pro p[k] < 1872 851947, její polovinu dokonce pro p[k] < 1999 066 711391). Obsahuje-li naše tabulka prvočísla aspoň do 500 000, je asi lepší po vyčerpání tabulky v dělení nepokračovat, ale užít jinou metodu. Není nutné počítat [v^V], stačí test v kroku 4 nahradit testem zda d > q, kde q je podíl po dělení čísla A^ číslem d se zbytkem, který byl získán jako vedlejší produkt při dělení v kroku 3. 6 TESTY NA SLOZENOST 11 6 Testy na složenost Musíme si zvolit nějakou podmínku, které vyhovuje každé prvočíslo a které složená čísla většinou nevyhovují, přičemž je třeba, aby bylo možné podmínku pro dané přirozené číslo rychle ověřit. Na první pohled se zdá být vhodnou podmínkou Wilsonova věta, která dává dokonce nutnou a dostatečnou podmínku prvočíselnosti a byla by tedy nejen testem na složenost, ale také testem na prvočíselnost. Avšak nikdo neví, jak spočítat pro velká N dostatečně rychle číslo (AT- 1)! mod AT. Výhodnější podmínku dává Fermatova věta, neboť je možné rychle počítat mocniny prvků v libovolné grupě. Předpokládejme, že je dána grupa (G, •) s neutrálním prvkem 1 a že umíme prvky této grupy uchovávat v paměti a také s nimi počítat (násobit a počítat inverzní prvky). Algoritmus (Binární umocňování zprava doleva). Pro dané g E G a dané celé číslo n algoritmus počítá gn v grupě (G, •). 1. [Inicializace] Polož y <— 1. Je-li n = 0, pak vytiskni y a skonči. Je-li n < 0, polož N <------n, z <— g~l. Jinak polož N <— n, z <— g. 2. [Násob?] Je-li N liché, polož y <— z ■ y. 3. [Poloviční N] Polož N <— [y]. Je-li N = 0, vytiskni y a skonči. Jinak polož z <— z ■ z a jdi na 2. Důkaz správnosti algoritmu. Vždy před započetím kroku 2 platí y ■ zN = gn. Jistě to platilo při prvním vstupu na krok 2; označíme-li N', y' a z' nové hodnoty proměnných N, y a z po provedení kroků 2 a 3, platí a) pro A" sudé: y' = y, N' = y, z' = z2, tedy y' ■ (z')N = y ■ z2^ = y ■ zN; b) pro A" liché: y' = y ■ z, N' = ^f^, z' = z2, tedy y' ■ (z')N = y ■ z ■ z2^~ = y ■ zN. Je zřejmé, že při skončení algoritmu je tato hodnota v y. Odhad časové náročnosti algoritmu. Je jasné, že grupové násobení se provádí a + b—1 krát, kde a je počet cifer ve dvojkovém zápise čísla n a b je počet jedniček v tomto zápise. Jistě platí a + b—1 < 2[log2 \n\] + 1. Například, je-li G = (Z/mZ)x, je jedno násobení časové náročnosti 0(ln2m), proto celý algoritmus je časové náročnosti 0(ln2mln |n|). V předchozím algoritmu jsme procházeli cifry dvojkového zápisu čísla n zprava doleva. Zcela analogicky můžeme tyto cifry procházet ovšem zleva doprava. Musíme však znát polohu „nejlevější" jedničky v tomto zápise, tj. znát e G Z s vlastností 2e < \n\ < 2e+1. Algoritmus (Binární umocňování zleva doprava). Pro dané g E G a dané celé číslo n algoritmus počítá gn v grupě (G, •). Je-li n^ 0, předpokládáme, že je dáno e E Z s vlastností 2e < \n\ < 2e+1. 1. [Inicializace] Je-li n = 0, pak vytiskni 1 a skonči. Je-li n < 0, polož N <------n, z <— g~l. Jinak polož N <— n, z <— g. Konečně (tj. v obou případech) polož y <— z, E <— T, N ^ N- E. 2. [Konec?] Je-li E = 1, vytiskni y a skonči. Jinak polož E <— y. 3. [Násob] Polož y <— y ■ y. Je-li N > E, polož N ^ N — E, y ^ y ■ z. Jdi na 2. Důkaz správnosti algoritmu. Vždy před započetím kroku 2 platí yE ■ zN = gn. Jistě to platilo při prvním vstupu na krok 2, kdy yE ■ zN = z2e ■ zN~2<í = zN = gn. Označme E', N' a y' nové hodnoty proměnných E, N a y po provedení kroků 2 a 3, platí 6 TESTY NA SLOZENOST 12 a) pro N < E': E' = f, y' = y2, N' = N, tedy {y')E' ■ zN' = (y2)f • zN = yE ■ zN■ b) pro N>E':E'=E-,y' = y2-z,N' = N- E', tedy (y'f ■ zN' = (y2 ■ z) f • zN~1 = yE ■ zN. V průběhu celého výpočtu platí jV>0a vždy před provedením kroku 2 je N < E. Proto při skončení algoritmu při E = 1 nutně platí N = 0 a tedy gn = y. Je jasné, že kroky 2 a 3 se provedou právě e krát a tedy algoritmus se jistě zastaví. Nevýhody oproti předchozímu algoritmu: je třeba před začátkem spočítat e, to však (je-li základ naší poziční soustavy pro uchovávání „velkých" čísel mocnina 2) je velmi rychlé. Patrně totiž budeme znát pozici nejvyšší nenulové cifry v naší poziční soustavě a pak určení e zabere čas ohraničený konstantou. Zdánlivou nevýhodou je i uchovávání velkého čísla E a výpočet rozdílu N — E. Avšak při implementaci budeme uchovávat e a test N > E i výpočet N — E provedeme manipulací s bitem obsahujícím e-tou dvojkovou cifru čísla N (zde je podstatné, aby skutečně byl základ naší poziční soustavy mocnina 2). Výhoda je to, že jedno ze dvou násobení, které se provádí v kroku 3, je vždy proměnnou z, ve které je v průběhu celého výpočtu g (nebo g~l je-li n < 0). Je-li tedy například G = (Z/mZ)x, v případě, že g = a + rriL pro \a\ menší než je základ naší poziční soustavy, je násobení g pouze lineárního času a ne kvadratického, jak je tomu u obecného násobení v grupě G. Pak se tedy v kroku 3 provede jedno násobení řádu 0(ln2 m) a nejvýše jedno řádu 0(ln m). Celý algoritmus je sice stále časové náročnosti 0(ln2mln |n|), ale s menší O-konstantou. Nyní, když vidíme, že umocňování v okruhu zbytkových tříd můžeme opravdu provádět rychle, si rozmysleme, jak užít Fermatovu větu pro test na složenost. Máme tedy dáno přirozené číslo N, o kterém chceme vědět, zda je to číslo složené. Budeme to vědět jistě, nalezneme-li celé číslo a, 1 < a < N, pro které platí aN~l ^ 1 (modAf). Takové a se nazývá svědek složenosti čísla N. Pokud však pro takové a platí aN~l = 1 (modAf), nemůžeme z toho usoudit nic. Celý algoritmus tedy bude vypadat takto: budeme náhodně volit a E Z, 1 < a < N, a počítat aN~l mod N. Pokud pro některé a bude splněno aN~l ^ 1 (mod N), jsme hotovi a víme, že N je opravdu složené číslo (zmíněné a si můžeme zapamatovat pro případ, že bychom chtěli přesvědčit někoho dalšího o složenosti N). Pokud pro všechna a budeme dostávat aN~l = 1 (modAf), po jistém počtu pokusů algoritmus ukončíme a usoudíme, že patrně je N prvočíslo. Jestli je však opravdu N prvočíslo takto zjistit nemůžeme. Nevýhodou popsaného algoritmu je, že téměř jistě neodhalí jistý typ složených čísel, nazývaných Carmichaelova čísla. Definice. Složené číslo N se nazývá Carmichaelovo číslo, jestliže pro všechna celá čísla a, která jsou nesoudělná s N, platí aN~l = 1 (modAf). Carmichaelovo číslo by náš algoritmus označil za složené pouze tehdy, kdyby za a zvolil číslo soudělné s N, což je však velmi nepravděpodobné. Přitom platí následující věta, kterou zde uvádím bez důkazu. Věta (Alford, Granville, Pomeranče). Existuje nekonečně mnoho Carmichaelových čísel. Příklad. Af = 561 = 3 • 11 • 17 je Carmichaelovo číslo. Důkaz. Pro libovolné celé číslo a nesoudělné s 561 z Fermatovy věty dostáváme a2 = 1 (mod3), a10 = 1 (mod 11) a a16 = 1 (mod 17). Protože 2, 10 i 16 jsou dělitelé čísla 560, je 561 Carmichaelovo číslo. Výhodnější než testovat Fermatovu větu je proto testování následujícího zesílení Fermatovy věty. 6 TESTY NA SLOZENOST 13 Věta. Pro libovolné liché prvočíslo p a libovolné celé číslo a nedělitelné p platí a 2 = ±1 (modp). Důkaz. Z Fermatovy věty p | (ď-1 - 1) = (a^r - 1) • (a^r + 1). Protože je p prvočíslo, musí dělit některého z uvedených činitelů. N — l Test založený na výpočtu a^~ mod N a kontrole, zda je výsledek 1 nebo N — 1 by mohl vyloučit i 561, neboť 5280 = 516.17+8 = 58 = 254 = g4 = ^3 = (_1)3 = _X (mod 17) a zároveň 5280 = (52)140 = l(mod3), a proto 5280 není kongruentní modulo 561 ani s 1 ani s —1. Na druhou stranu, tento test neodhalí například N = 1729 = 7-13-19, neboť ^f^ = 864 = 25 • 33 je dělitelné 6, 12 i 18 a tedy z Fermatovy věty plyne, že pro všechna celá čísla a nesoudělná s N platí N — l a^~ = 1 (mod N). Proto je třeba podmínku, kterou budeme testovat, ještě více zesílit. Algoritmus, navržený Millerem a Rabínem, užívá následujícího tvrzení: Věta. Nechť p je liché prvočíslo. Pišme p—1 = 2f-q, kde t je přirozené číslo a q je liché. Pak pro každé celé číslo a nedělitelné p buď platí aq = 1 (modp) nebo existuje e E {0,1,..., t — 1} splňující a2'q = — 1 (modp). Důkaz. Z Fermatovy věty í-i p | (ď-1 - 1) = (aq - 1) • Y[(a2eq + 1). e=0 Protože je p prvočíslo, musí dělit některého z uvedených činitelů. Test Millera a Rabina, založený na předchozí větě, s vysokou pravděpodobností objeví každé složené číslo, neboť platí následující věta. Věta. Nechť N > 10 je liché složené číslo. Pišme N — 1 = 2* • q, kde t je přirozené číslo a q je liché. Pak nejvýše čtvrtina z čísel množiny {a E Z; 1 < a < N, (a, N) = 1} splňuje následující podmínku: aq = 1 (modN) nebo existuje e E {0,1,... ,t — 1} splňujícía2£q = —1 (modN). Důkaz. Pro značnou délku prozatím důkaz neuvádím. Algoritmus (Miller - Rabin). Pro dané liché N > 3 algoritmus s vysokou pravděpodobností objeví, že N je složené. Pokud se mu to nepodaří, vytiskne zprávu, že N je asi prvočíslo. 7 TESTY NA PRVOCÍSELNOST 14 1. [Inicializace] Polož q ^ N — 1, ŕ <— 0. Dokud je q sudé, opakuj g<— |,ŕ<—ŕ+1. Polož c ^20. 2. [Zvoi a] Pomoci generátoru náhodných čísel zvol náhodně a E Z, 1 < a < N. Pak polož e <— 0, 6 <— a9 mod iV. Je-ii b = 1, jdi na 4. 3. [Umocňuj na druhou] Dokud jeb ^ N — 1 a e < t — 2, opakuj b <— b2 mod iV, e <— e + 1. Je-li b y^ N — 1, vytiskni zprávu, že N je složené a vytiskni svědka složenosti a. Skonči. 4. [Už proběhlo 20 pokusů?] Polož c <— c — 1. Je-li c > 0, jdi na 2. Jinak vytiskni zprávu, že N je asi prvočíslo a skonči. Důkaz správnosti algoritmu. Algoritmus testuje podmínku z předchozí věty pro 20 náhodně zvolených a. Pokud pro některé takové a není podmínka splněna, vytiskne zprávu, že N je složené. Pokud je splněna podmínka pro každé takové a, vytiskne zprávu, že N je asi prvočíslo. Podle předchozí věty je pravděpodobnost, že bude vytištěna tato zpráva, ačkoli je N složené, menší než 4-20. Odhad časové náročnosti. Algoritmus je řádově stejné časové náročnosti jako umocňování v něm použité (předpokládáme, že generování nového a je řádově rychlejší), proto jde 0 kubickou časovou náročnost. 7 Testy na prvočíselnost V této kapitole si uvedeme tzv. N — 1 test Poclingtona a Lehmera. Je založen na následující větě. Věta. Nechť N je přirozené číslo, N > 1. Nechť p je prvočíslo dělící N —1. Předpokládejme dále, že existuje ap E Z tak, že JV-l a^-1 = 1 (modiV) a (app -1,N) = 1. (2) Nechť pap je nejvyšší mocnina p dělící N — 1. Pak pro každý kladný dělitel d čísla N platí d= 1 (modpap). Důkaz. Protože každý kladný dělitel d čísla N je součinem prvočíselných dělitelů čísla N, stačí větu dokázat pouze pro případ, kdy je d prvočíslo. Podle Fermatovy věty platí JV-l JV-l ßp-1 = 1 (modd), neboť (ap,N) = 1. Protože (app —1,N) = 1, platí app ^ 1 (modd). Označme e = mm{n E N; a™ = 1 (modd)}. Podle věty 9 čtvrté kapitoly platí e \ d — 1, e | iV — laef ^—-. Kdyby pav \ e, z e | N — 1 by plynulo e | ^=i; spor. Je tedy pap | e, a tedy i pap \ d — 1. Důsledek. Nechť N E N, N > 1. Předpokládejme, že můžeme psát N — 1 = F ■ U, kde (F, U) = 1 a F > \^Ň, přičemž známe rozklad čísla F na prvočinitele. Pak platí (a) jestliže pro každé prvočíslo p \ F můžeme najít ap E Z splňující (2) z předchozí věty, pak je N prvočíslo; (b) je-li N prvočíslo, pak pro libovolné prvočíslo p \ N — 1 existuje ap E Z splňující (2). Důkaz, (a) Z předchozí věty plyne, že libovolný kladný dělitel čísla N splňuje d = 1 (modF), tedy mezi čísly 2, 3, ..., F není žádný dělitel čísla N. Protože F > \/Ň\ jsme hotovi. 7 TESTY NA PRVOCÍSELNOST 15 (b) Stačí zvolit primitivní kořen modulo N. Nevýhodou předchozí věty je to, že musíme dostatečně rozložit číslo N—l. Jistě to bude číslo sudé, ale rozložit na prvočinitele číslo ^-^ může být notně obtížné. Poměrně snadno lze ale získat všechny prvočíselné dělitele tohoto čísla až po vhodnou hranici B (např. algoritmem pokusného dělení). Této informace pak můžeme s výhodou využít. Věta. Nechť N eN,JV> 1. Předpokládejme, že můžeme psát N—l = F-U, kde (F, U) = 1 a známe rozklad čísla F na prvočinitele. Dále předpokládejme, že všechna prvočísla dělící U jsou větší než B e N a že platí B ■ F > \/Ň. Pak platí: jestliže pro každé prvočíslo p \ F můžeme najít ap E Z splňující (2) z předchozí věty a jestliže navíc existuje au E Z splňující a^-1 = 1 (mod V) a (a£ - l,iV) = 1, pak je N prvočíslo. Je-li naopak N prvočíslo, pak požadovaná ap,au E Z vždy existují. Důkaz. Nechť d je prvočíselný dělitel čísla N. Z předchozí věty dostáváme d = 1 (mod F). Označme e = mm{n E N; av = 1 (modd)} (takové e existuje, protože (au, N) = 1). Z věty 9 čtvrté kapitoly vyplývá e | d— 1, e | N — 1 a e\ F. Kdyby (e, U) = 1, z e | N — 1 = FU by plynulo e | F. Je tedy (e, U) > 1 a protože U je dělitelné pouze prvočísly většími než B, platí (e, U) > B. Protože (F, U) = 1, z d = 1 (mode) a d = 1 (mod F) plyne d = 1 (mod F ■ (e, U)) a tedy d > F ■ (e,U) > FB > y/N. Je tedy iV prvočíslo. Naopak, je-li N prvočíslo, stačí za au zvolit primitivní kořen modulo N. ofc Příklad. Aplikujme důsledek na k-té Fermatovo číslo N = 2 +1, kde fceN. Platí tedy: N je prvočíslo právě když existuje a E Z splňující a2"" = 1 (mod AO a (a2^1 - l,iV) = 1. Je možné dokázat, že je-li A^ prvočíslo, platí 32 = —1 (mod N) (důkaz vyžaduje hlubší znalosti, uvádím jej pro ty, kteří znají kvadratický zákon reciprocity): (f) = (f) • (-i)^ = (f) = (!)=-!• Je zřejmé, že jestliže naopak platí 32 = — 1 (modAf), pak a = 3 splňuje stanovenou podmínku a tedy A^ je prvočíslo. Poznámka k implementaci algoritmu. Vstupem je číslo N, které již prošlo testem Millera - Rabina, tedy číslo, o kterém s vysokou pravděpodobností platí, že je to prvočíslo. Je třeba to však dokázat. V první části algoritmu rozkládáme číslo V— 1 na součin F■ U a to tak, že podrobíme N— 1 algoritmu pokusného dělení, ukládáme získané dělitele a skončíme, až platí B F > \/Ň, nebo až je B „dost velké", abychom si byli jisti zastavením v „rozumném" čase (zde B, F, U značí totéž, co v předchozí větě). Pak náhodně volíme celá čísla ap v intervalu JV-l 1 < ap < N a počítáme bp = app mod N a cp = \řp mod N do té doby než cp = 1 (mod N) a (bp — 1, N) = 1. (Pokud by snad cp ^ 1 (mod V), znamenalo by to, že N není prvočíslo.) Je-li N opravdu prvočíslo, podmínku (bp — 1, N) = 1 splňuje většina z čísel ap - přesněji právě E—l-(N — 1) čísel z N —1 čísel 1, 2, ..., N—l, můžeme tedy očekávat, že takové ap brzy 8 NĚKTERÉ NEZBYTNOSTI Z ALGEBRAICKÉ GEOMETRIE 16 najdeme. Pokud by však N bylo „velké" Carmichaelovo číslo, algoritmus by se pravděpodobně nezastavil. Poznámka k časové náročnosti algoritmu. Je obtížné hovořit o časové náročnosti -předně, není-li N prvočíslo, algoritmus se nemusí zastavit. Ale i pro prvočísla je těžké stanovit jakýkoli odhad, protože záleží na tom, jak snadno lze rozkládat číslo N — 1. Je také možné nerozloženou část U podrobit testu Millera a Rabina a v případě, že test zjistí, že U je asi prvočíslo, dokázat nejprve prvočíselnost U (a tedy pracovat rekurzivně). Poznámka o možném zobecnění algoritmu. Je-li N prvočíslo, podle věty 12 čtvrté kapitoly existuje těleso ¥N2 o N2 prvcích. Podle věty 14 stejné kapitoly je jeho multiplikativní grupa cyklická řádu N2 — 1 = (N — Í)(N + 1). Existuje tedy a E ¥N2 řádu N + 1, tj. splňující N+l aN+1 = 1, avšak oT^~ ^ 1 pro libovolné prvočíslo p dělící N + l. Tuto myšlenku je možno využít pro test analogický testu Poclingtona a Lehmera, kde však bude vystupovat faktorizace čísla N + l místo N — 1. Je dokonce možné informace, získané z obou testů, zkombinovat. Podobně lze využít těleso ¥N3 (a tedy faktorizovat NN~^ = N2 + N + 1), těleso ¥Nt (a faktorizovat ^2~| = N2 + 1) nebo těleso ¥N@ (a faktorizovat (jv3-i)7jv+d = N2 — N + 1) & podobně. Vždy nám však už vycházejí čísla podstatně větší než N a tedy pravděpodobně obtížně rozložitelná. 8 Některé nezbytnosti z algebraické geometrie V celé kapitole předpokládáme, že K je těleso. Definice, n-rozměmým afinním prostorem nad K rozumíme kartézskou mocninu Kn. Budeme jej značit An(K), tj. An(K) = {(xi,..., xn); xi,..., xn E K}. Definice, n-rozměrným projektivním prostorem nad K rozumíme rozklad na množině Kn+l — {(0,..., 0)} příslušný ekvivalenci ~; kterou definujeme takto: pro libovolné (n + l)-tice (xi,..., xn+i), (yi,..., yn+i) E Kn+l položíme (xi,..., xn+í) ~ (yi, ■ ■ ■, yn+i) právě tehdy, když existuje X E Kx, které pro každé i E {1,... ,n + l} splňuje podmínku Xí = Xyi. Tento n-rozměrný projektivní prostor nad K budeme značit P"(K), třídu rozkladu (tj. bod projektivního prostoru) obsahující (n + l)-tici (x\,..., xn+i) budeme značit [x\,..., xn+\]. Poznámka. Nechť x\,... ,xn+\ E K, přičemž alespoň jedno z nich je různé od nuly. Jestliže xn+\ 7^ 0, pak platí [x\,... ,xn+\] = [^—,...,^-,1], čímž je pevně dán bod (^—,..., ^°-) E An(K). Jestliže naopak xn+\ = 0, určuje [x\,... ,xn+\] jednoznačně bod [x\,... ,xn] E Pn~l(yK). Lze tedy n-rozměrný projektivní prostor „rozdělit" na n-rozměrný afinní prostor a na „část nevlastních bodů", kterou je (n — l)-rozměrný projektivní prostor. Toto rozdělení není kanonické - lze to provést mnoha způsoby. Poznámka. Máme-li homogenní polynom F(t\,..., tn+\) E K[t\,..., tn+\\ o n+l proměnných nad K stupně k a bod [x\,..., xn+\] E Pn(K), má smysl se ptát, zda F(x\,..., xn+i) = 0. Je-li totiž [xi,... ,xn+i] = [j/i,..., j/n+i], pak existuje A E Kx, které pro každé i E {1,..., n + 1} splňuje podmínku Xi = Xyi. Pak ovšem F(x\,..., xn+\) = F(Xy\,..., Xyn+\) = Xk ■ F(yi,..., yn+i) a tedy F(xi,..., xn+í) = 0 právě když F(yi,..., yn+í) = 0. Definice. Nechť F (ti,... ,tn+i) E K[ti,..., ín+i] Je homogenní polynom stupně k. Množina C = {[xi,.. .,xn+i] E Pn(K)- F(xi,.. .,xn+i) = 0} 8 NĚKTERÉ NEZBYTNOSTI Z ALGEBRAICKÉ GEOMETRIE 17 se nazývá nadplocha stupně k v Pn(K). Je-li n = 2, hovoříme také o křivce stupně k v P2(K). Poznámka. Parciální derivací homogenního mnohočlenu je opět homogenní mnohočlen. Má proto smysl následující definice. Definice. Nechť F (ti,..., ín+i) £ K [ti,..., tn+i] je homogenní polynom stupně k a C = {[xi,.. .,xn+i] E Pn(K); F(xi,.. .,xn+i) = 0} příslušná nadplocha. Bod [xi,... ,xn+i] E C se nazývá singulární, jestliže pro každé i E {1, ..., n + 1} platí dF — (xi,..., xn-\-i) — 0. OXi Nadplocha C se nazývá singulární, existuje-li alespoň jeden její singulární bod. Příklad. Uvažme reálnou projektivní rovinu P2(R). Abychom se vyhnuli indexům, budeme psát x, y, z místo ti, t2, t3. Kubický mnohočlen Fx(x, y, z) = x3+x2z — y2z nám definuje kubickou křivku Ci (tj. křivku stupně 3) Ci = {[x,y,z] E P2(R); Fi(x,y,z) =0}. Jistě [0, 0,1] E Ci. Tento bod je singulární, neboť 9Fi _ o . dF, dFi 2 2 —— = óx + Ixz, —— = —2yz, —— = x — y . ox oy oz Je tedy Ci singulární křivka. Uvažme nyní mnohočlen F2(x, y, z) = x3 + xz2 — y2z a příslušnou kubickou křivku C2 = {[x,y,z] E P2(R); F2(x,y,z) =0}. Hledejme singulární body na C2. Platí dF2 2 2 dF2 dF2 2 —- = 3x + z , ^— = -2yz, ^— = 2xz - y . ox oy oz Z ^ = 0 plyne x = 0 a z = 0, pak ale z ^ = 0 plyne i y = 0. Singulární bod na C2 tedy neexistuje a proto C2 není singulární křivka. Definice. Eliptická křivka nad K je uspořádaná dvojice (8,0), kde £ je nesingulární kubická křivka v P2(K) a O E £. Poznámka. Je možné zavést pojem biracionální ekvivalence dvou křivek, spočívající v tom, že existují transformace prostoru převádějící jednu křivku na druhou a obráceně, přičemž tyto transformace jsou „pěkné" v tom smyslu, že transformační rovnice jsou dány homogenními polynomy téhož stupně nad K. Precizní zavedení tohoto pojmu je však časově náročné a proto od něj upouštím. Tento pojem je zde zapotřebí pouze proto, abychom si ukázali, že vlastně neztrácíme nic na obecnosti, omezíme-li se na eliptické křivky speciálního tvaru. Nebudeme tedy ani dokazovat následující větu. Věta. Libovolná eliptická křivka nad K je biracionálně ekvivalentní s nějakou eliptickou křivkou (£,0) následujícího tvaru (přičemž transformace převádějí vyznačený bod jedné křivky na vyznačený bod druhé křivky) £ = {[x,y,z] E P2(K); F(x,y,z) = 0}, 9 ARITMETIKA ELIPTICKÝCH KŘIVEK 18 kde F(x, y, z) = y z + a\xyz + a^J/^ — x — ß3X z — a4^z — 05z , ai, ..., a5 E K a O = [0,1, 0]. Poznámka. Každá eliptická křivka ve výše uvedeném tvaru má jeden nevlastní bod (totiž O) a v afinní části je dána rovnicí y2 + CL\xy + a2y = x3 + a3x2 + a4x + a5. Tato rovnice se nazývá Weierstrassova rovnice. Omezení. V dalším textu budeme předpokládat, že charakteristika tělesa K není ani 2 ani 3, tj. že 2 i 3 jsou invertibilní prvky v K. Důvodem je to, že pro naše účely eliptické křivky nad tělesy charakteristiky 2 a 3 nejsou zapotřebí a že tento předpoklad dále zjednodušuje Weierstrassovu rovnici. Můžeme pak totiž předpokládat, že a\ = a2 = «3 = 0 a tedy Weierstrassova rovnice je tvaru y2 = x3 + a±x + a$. 9 Aritmetika eliptických křivek V celé kapitole předpokládáme, že K je těleso charakteristiky různé od 2 a 3 a že je dána eliptická křivka (£, O), kde O = [0,1, 0] a £ je dána Weierstrassovou rovnicí y2 = x3 + ax + b, kde a, b E K. Jak plyne z následující věty, pak nutně 4a3 + 27b2 7^ 0. Věta. Rovnice y2 = x3 + ax + b je Weierstrassovou rovnicí nějaké eliptické křivky, pravé když platí 4a3 + 27b2 ^ 0. Důkaz. Položme F(x,y, z) = y2z — x3 — axz2 — bz3. Platí dF 2 2 dF dF 2 ,2 ^— = — 3x — az , ^— = 2yz, —— = y — 2axz — 3bz . ax ay az Předpokládejme, že [x,y,z] je singulární bod. Pak z = 0 implikuje x = y = 0, spor. Je tedy z^0. Proto y = 0 a pro 7 = - platí 372 = —a, 2aj = —36. Jestliže a = 0, pak také 6 = 0. Naopak pro a = 6 = 0 je bod [0,0,1] singulární. Zabývejme se dále případem a 7^ 0. Platí 7 = —1^,72 = —| = |^2,tj. 4a3 + 2762 = 0. Zbývá ověřit, že [7, 0,1] vyhovuje rovnici, což je snadné: 73 + a7 + 6=(-i)(-f)+a(-i)+6=|-f + 6 = 0. Poznámka. Naším cílem je definovat na £ grupovou operaci +. Je třeba tedy najít nějaký předpis, jak dvěma bodům z £ přiřadit třetí. Máme-li dány dva různé body z £, můžeme jimi vést přímku. Dosazením rovnice této přímky do Weierstrassovy rovnice získáme kubickou rovnici, jejíž dva kořeny známe. Existuje proto třetí kořen, který lze snadno spočítat. Tento třetí kořen odpovídá třetímu průsečíku přímky s eliptickou křivkou (který může popřípadě i splynout s některým z daných bodů). Podobně můžeme postupovat i v případě, kdy vezmeme dvakrát týž bod z £: sestrojíme v tomto bodě tečnu k £. Protože K nemusí být těleso reálných čísel, je možná vhodné upřesnit, co rozumíme touto tečnou: je to taková přímka, že po dosazení její rovnice do rovnice 9 ARITMETIKA ELIPTICKÝCH KŘIVEK 19 eliptické křivky dostaneme kubickou rovnici, ve které bod dotyku odpovídá kořenu alespoň dvojnásobnému. Zbylý kořen pak odpovídá dalšímu průsečíku přímky s eliptickou křivkou (který by opět mohl splynout s daným bodem). V obou případech nám dvojice bodů z £ určila další bod z £. Tato binární operace by nám však nevytvořila z £ grupu (je zřejmé, že tato operace obecně nemá neutrální prvek). Operaci + na £ definujeme takto: pro libovolné body A, B E £ označme C bod z £ jimi určený. Součtem A + B pak nazveme bod z £ určený body C a O. Příklad. Nevlastní přímka z = 0 má s £ trojnásobný bod dotyku O: dosazením z = 0 do rovnice y2z = x3 + axz2 + bz3 dostaneme rovnici x3 = 0, která má trojnásobný kořen x = 0. Proto pro A = B = O je i C = O a tedy i A + B = O. Je tedy 0 + 0 = 0. Uvažme případ A = O, B ^ O. Pak B = [a,ß, 1] pro vhodné a, ß E K. Přímka určená body O, B má rovnici x = az (nevlastním bodem této přímky je O, vlastní body jsou [a, y, 1] pro všechna y E K). Je zřejmé, že C = [a, —ß, 1] a že třetí bod na přímce určené C a O je B. Ověřili jsme tedy, že platí O + B = B. Je zřejmé, že operace + je komutativní. Víme tedy, že (£,+) je komutativní grupoid s neutrálním prvkem O a že pro každý bod A E £ existuje bod B E £ splňující A + B = O (je-li A = O, vezmeme B = O; je-li A = [a,ß, 1], vezmeme B = [a, —ß, 1]). Poznámka. K důkazu tvrzení, že (£, +) je komutativní grupa, je třeba dokázat, že + je asociativní operace. To ale není snadné a omezíme se pouze na konstatování tohoto faktu bez důkazu. Věta. Na eliptické křivce (£,0) nad K definujeme operaci + takto: 1. Pro libovolné A E £ klademe A + O = O + A = A. 2. Pro libovolné A = [a,ß, 1] E £ je také B = [a, —ß, 1] E £ a klademe A + B = O. (Tento bod B pak označujeme —A.) 3. Pro libovolné A = [a, ß, 1] G £, B = [7, 8,1] E £ takové, že B ^ —A, položme ^ je-li A^B, a = k2 — a — 7, r = —ß + k (a — a), pak platí [a, r,l] E £ a klademe A + B = [a, r, 1] E £. Pak (£, +) je komutativní grupa. Poznámka. Důkaz toho, že + je asociativní operace, je mimo možnosti naší přednášky. Doporučuji si ale samostatně ověřit, že vzorce uvedené ve větě odpovídají výše uvedené geometrické konstrukci. Eliptické křivky tvoří komutativní grupu i nad tělesy charakteristiky 2 a 3. Je však třeba uvažovat obecnější tvar Weierstrassovy rovnice a proto i vzorce popisující sčítání bodů jsou komplikovanej ší. Následující věty budeme potřebovat v dalším textu. Jde o velmi hluboká tvrzení, které mohu uvádět jen bez důkazu. Věta (Hasse). 1. Necht p je prvočíslo a (£,0) je eliptická křivka nad ¥p. Pak \£\ = p + 1 — ap, kde celé číslo ap splňuje \ap\ < 2^/p. 10 OPĚT TESTY NA PRVOCÍSELNOST 20 2. Označme ap E C kořen rovnice x2 — apx + p = 0. Pro libovolné n E N nechť (£n,0) je eliptická křivka nad¥pn určená stejnou Weierstrassovou rovnicí jako (£,0) (to má smysl, neboťFp C ¥pn). Pak platí \£n\ = pn + 1 — 2Re(cüp); kde Re značí reálnou část komplexního čísla. Věta. Nechť (£,0) je eliptická křivka nad konečným tělesem ¥q, kde q je mocnina prvočísla. Pak (£,+) je cyklická grupa nebo součin dvou cyklických grup. Navíc, ve druhém případě, je-li (£, +) izomorfní se součinem cyklických grup o d\ a a^ prvcích, přičemž d\ \ dz, pak platí d\ \ q — 1. Věta (Mordell). Nechť (£,0) je eliptická křivka nad Q. Pak (£,0) je konečně generovaná grupa. Jinými slovy: označme (£',+) podgrupu prvků konečného řádu v grupě (£,+) (tzv. torzní podgrupa); pak existuje (jednoznačně určené) nezáporné celé číslo r tak, že (£, +) je izomorfní se součinem (£',+) x (z, +y. Věta (Mazur). Nechť (£,0) je eliptická křivka nad Q. Pak její torzní podgrupa je izomorfní s některou z následujících 15 grup: (Z/mZ, +) pro 1 < m < 10 nebo m = 12 (Z/2Z, +) x (Z/2mZ, +) pro 1 < m < 4 (a každá z uvedených grup je torzní grupa některé eliptické křivky nad Q). 10 Opět testy na prvočíselnost Předpokládáme, že iV > 1 je liché přirozené číslo, o kterém jsme testem Millera a Rabina zjistili, že iV je asi prvočíslo. Naším cílem je vyložit test na prvočíselnost, využívající eliptické křivky. Začněme ale zopakováním N — 1 testu Poclingtona a Lehmera. Pracujeme v něm se známým prvočíslem p dělícím N —1 (přičemž pap je nejvyšší mocnina p dělící N—l) as jistým neznámým dělitelem d čísla iV (budeme předpokládat, že i d je prvočíslo). Pak můžeme uvážit homomorfismus okruhů / : Z/NZ ->■ Z/dZ, kde a + NZ i-» a + dZ (homomorfismus / je dobře definován, neboť d \ N). Protože je d prvočíslo, je druhý okruh těleso ¥d = Z/dZ. Předpokládáme existenci ap E Z, které splňuje JV-l a^-1 = 1 (modiV) a (app -1,N) = 1. N — l Označme b = f(ap + NZ) E ¥4. Pak bN~l = 1, b^~ ^1 a tedy řád prvku b je dělitelný pap, odkud pap I d — 1, tedy d = 1 (modp"p). Promysleme si nyní N + 1 test. Potřebujeme znát prvočíslo p, které (v tomto případě) dělí N + 1. Označme opět pap nejvyšší mocninu p dělící N + 1. Zvolme pevně q E Z, (q, N) = 1, takové, že x2 = q (mod N) nemá řešení. (Takové q jistě existuje: zvolíme-li libovolné prvočíslo r dělící iV a primitivní kořen g modulo r, pak tuto vlastnost mají všechna čísla nesoudělná s N, která jsou modulo r kongruentní s lichými mocninami g. Podle věty 5 čtvrté kapitoly je takových čísel alespoň polovina ze všech přirozených čísel menších než N.) Zkonstruujme okruh R takto: (R, +) = (Z/NZ, +) x (Z/NZ, +) 10 OPĚT TESTY NA PRVOCÍSELNOST 21 a pro libovolné (a, b), (c, d) E R položme (a, b) ■ (c, d) = (ac + qbd, ad + bc) (můžeme si místo (a, b) „představovat" a + ^/q-b). Snadno se ukáže, že R je komutativní okruh s jedničkou (1, 0) (přesněji (1 + NI, NI)). Opět budeme pracovat s jistým (neznámým) prvočíselným dělitelem d čísla N. Uvažme konečné těleso Fd2 a označme g generátor grupy F*2 (ten existuje podle věty 14 čtvrté kapitoly). Protože F^ C Fd2, je F^ podgrupa řádu d — 1 cyklické grupy F^2 řádu d2 — 1. Protože (q,N) = 1, je i (q,d) = 1 a tedy má smysl uvažovat q E ¥^ (přesněji q + dli E (1/d1)x = F^). Proto q = g(d+l">c pro vhodné c E 1. Označme s = g^~'c, pak s2 = q. Uvažme dvojici homomorfismů /i;2 : R —► Fd2 definovanou takto: fi((a, b)) = a + sb, f2((a,b)) = a — sb. (Sami ověřte, že jde o homomorfismy okruhů). Předpokládejme, že jsme JV+l našli a E R s vlastností aN+1 = 1, a^~ ^ 1. (Jak takové a hledat: zvolíme nějaké ß = (a, b) E R splňující &^0 a položíme a = ßN~l. Jestliže pak aN+1 ^ 1, není R těleso a proto JV+l není N prvočíslo a jsme hotovi. Pokud a p =1, což v případě prvočíselného N nastává s pravděpodobností -, zvolíme jiné ß.) Můžeme předpokládat, že a^~ = (x + NI, y + NI), kde (x — 1, N) = 1 nebo (y, N) = 1 (v opačném případě bychom dostali netriviálního dělitele N). Označme 71 = f\(a), 72 = /'2(a)- Pl&tí 7iV+1 = 1 a současně 7^+1 = 1. JV+l JV+l JV+l Dokážeme sporem, že j1 p 7^ 1 nebo 72 p 7^ 1. Jestliže totiž 7^ = 1 a současně JV+l 72 p =1, znamená to, že v tělese Fd2 platí x + sy = x — sy = 1, odkud plyne 2sy = 0, a tedy y = 0, neboť 2s G F^2, a x = 1. Tyto rovnosti v tělese Fd2 znamenají y = 0 (mod d) a x = 1 (modd), což je spor. JV+l Existuje tedy i E {1,2} tak, že 7tw+1 = 1 a 7^ p 7^ 1. Označme r řád prvku 7». Pak p"p | r. Současně r | d2 — 1, tedy d2 = 1 (modp"p). Odtud lze odvodit d = ±1 (modp"p), je-li p^ 2, popřípadě d = ±1 (mod2a2_1), je-li p = 2. V případě iV — 1 i N + 1 testu jsme byli schopni odvodit jistou informaci o potenciálních dělitelích d čísla N za předpokladu, že jsme byli schopni nalézt alespoň některé prvočinitele čísla N — 1 (resp. N + l). Obecně ale ve hledání dělitelů těchto čísel nemusíme být vůbec úspěšní (odhlédneme-li od zřejmého faktu, že čísla N — 1 a N + 1 jsou sudá a jedno z nich je dokonce dělitelné čtyřmi). Je proto potřeba provést analogické úvahy i v jiných situacích, tj. pro grupy o jiném počtu prvků než mají F^ a F^2. Potřebujeme, aby počet prvků takové grupy nebyl o mnoho větší než d, aby byla reálná šance nalezení prvočíselného dělitele. Navíc je nutné, abychom byli schopni v této grupě počítat, přestože neznáme číslo d, ale jen jeho násobek N. Výše popsaným požadavkům vyhovují eliptické křivky nad F^. Protože však d neznáme, výpočty v této grupě budeme provádět pomocí nějakého homomorfismů z grupy, ve které jsme schopni počítat. Tím by mohla být „eliptická křivka" nad 1/N1. Uvozovky zde stály proto, že pro složené N není 1/N1 těleso a tedy tento pojem nebyl zaveden. Pokusme se to napravit. Pro stručnost označme R = 1/N1. Uvažme množinu M všech (n + l)-tic (x\,... ,xn+\) E Rn+l takových, že zvolíme-li reprezentanty zbytkových tříd x[ E x\, ..., x'n+1 E xn+\, čísla x[,... ,x'n+1, N jsou nesoudělná. Podobně jako pro tělesa nazveme n-rozměrným projektivním prostorem Pn(R) nad R rozklad množiny M, příslušný ekvivalenci ~ definované takto: pro libovolné (n+ l)-tice (x\,... , xn+\), (yi,.. .,yn+i) E Rn+l je (xx,.. .,xn+x) ~ (yx,... ,yn+i) právě tehdy, když existuje X E Rx, které pro každé i E {1,... ,n + 1} splňuje podmínku Xí = Ay». Bod projektivního prostoru Pn(R) (tj. třídu rozkladu M j ~) obsahující (n + l)-tici (xi,... ,xn+i) budeme značit [ X\, . . . , Xn-\-\\. Máme-li homogenní polynom F (ti,... , ín+i) £ R[ti, ■ ■ ■ , tn+i] o n + 1 proměnných nad R 10 OPĚT TESTY NA PRVOCÍSELNOST 22 stupně k a [x\,... ,xn+i] G Pn(R), má opět smysl položit C = {[x1}..., xn+l] G P" (R); F(x1}..., xn+l) = 0}. Pro libovolné a, b E R takové, že 4a3 + 27b2 G Rx, můžeme definovat „eliptickou křivku" (£, O) nad Z/NZ takto: O = [0,1, 0] a £ = {[x,y,z] G P2(Ä); y2 z = x3 + axz2 + bz3}. Chceme nyní definovat na £ operaci +. Uvažme proto vzorce ze druhé věty deváté kapitoly. Pro složené N nastanou komplikace v bodě 3, kdy A = [a,ß,l] G £, B = [7, í, 1] G £ a B 7^ —A. Může se totiž stát, že v případě a 7^ 7 je a — 7^ Rx nebo že v případě a = 7 je ß <£ Rx. Další komplikací je, že může existovat bod [x, y, z] G £ takový, že z 7^ 0 a současně z ^ i?x. Pro body tohoto typu žádné vzorce pro sčítání nemáme. Proto budeme definovat sčítání bodů z £ jen jako částečnou operaci: někdy sčítat lze (tj. při užívání zmíněných vzorců dělíme invertibilními prvky) a součtem je opět bod na £ (což vyžaduje ověření, které si zde odpouštím); jindy sčítat nelze, neboť by bylo třeba dělit nenulovým prvkem z R, který není invertibilní (to však vzhledem k tomu, že R = Z/NZ, znamená nalezení netriviálního dělitele čísla N). Poznamenejme, že je možná i druhá cesta, totiž definovat grupovou operaci pomocí projektivních souřadnic na celém £. Tím se však definice operace značně komplikuje (je třeba rozlišit devět různých případů). Pro naše účely je to zcela zbytečné, neboť v okamžiku, kdy se dostaneme do situace, kdy nelze sčítat, znamená to, že jsme nalezli netriviálního dělitele čísla N a jsme hotovi. Uvažujme nyní prvočíselný dělitel d čísla N. Pak máme homomorfismus okruhů / : R —► Fd, přičemž f(s + NZ) = s + dZ. Protože 4a3 + 27b2 G Rx, je y2z = x3 + f(a)xz2 + f(b)z3 rovnicí eliptické křivky (£d,Od) nad ¥d, kde Od = [0,1,0]. Podstatné je, že nám / indukuje zobrazení /' : P2(R) —► P2(¥d) určené předpisem f'([a,ß,j]) = [/(«), /(/3),/(7)] (zde jsme užili to, že f(Rx) C F^). Zúžení tohoto zobrazení na £ je částečný homomorfismus /' : £ —► £d v tomto smyslu: jsou-li A, B E £ takové, že je A + B definováno, pak platí f'(A + B) = f'(A) + f'(B). Věta. Nechť N > 1 je přirozené číslo nesoudělné s 6, R = Z/NZ, (£, O) „eliptická křivka" nad R. Předpokládejme, že jsme našli bod P = [x, y, z] E £ a prvočíslo q splňující l.q>{VŇ+l)2, 2. q ■ P (tj. součet q kopií bodu P) je definováno a platí q ■ P = O = [0,1, 0], 3. zeRx. Pak je N prvočíslo. Důkaz. Předpokládejme, že N není prvočíslo. Označme d nejmenší prvočíslo dělící N. Pak platí d < yN. Užijeme-li částečný homomorfismus /', dostaneme z podmínek 2 a 3, že f (P) je řádu q v grupě £d, odkud l^dl > g > (v/]V+ l)2 > (Vď+ l)2, 10 OPĚT TESTY NA PRVOCÍSELNOST 23 což je ale spor s Hasseho větou, podle které \\ed\ - (d +1)| <2\íď. Na předchozí větě je založen test na prvočíselnost pomocí eliptických křivek. Otázkou zůstává, jak zvolit eliptickou křivku (tedy jak zvolit a, b E R) a jak na ní najít bod P a prvočíslo q splňující předpoklady věty. Je jasné, že při hledání a, b, P, q můžeme postupovat, jako kdyby bylo N prvočíslo (o čemž jsme přesvědčeni, vždyť prošlo testem Millera a Rabina). I kdybychom je uhádli ze skleněné koule, výsledek je týž: větou dokážeme, že N skutečně prvočíslo je. Pro hledání a, b, P, q se užívají následující metody. 1. Goldwasser — Kilián. Existuje algoritmus Schoofa, který pro prvočíslo p počítá řád (tj. počet bodů) eliptické křivky nad Fp v čase 0(ln8p). Postupujeme takto: zvolíme náhodně a, b E R tak, aby 4a3 + 27b2 E Rx. Pomocí Schoofova algoritmu určíme pro křivku (S,0) určenou rovnicí y2 = x3 + ax + b a pro p = N její řád m (jestliže N není prvočíslo, nemá m žádný význam). Získané m zkoušíme dělit malými prvočísly, doufajíce, že poté, co odstraníme malé faktory, zůstane nám q > (\/Ň + l)2, q < y, o kterém test Millera a Rabina zjistí, že q je asi prvočíslo. Pokud se nám to nepodaří, začneme znovu s jinými a, b E R. Existuje algoritmus, který pro prvočíslo p a celé číslo e hledá v čase 0(ln4p) řešení kongru-ence x2 = e (modp) a to, že takové řešení neexistuje, zjistí dokonce v čase 0(ln2p). Bod P na křivce hledáme takto: náhodně zvolíme c E R a hledáme d E R tak, aby d2 = c3 + ac + b (jde o kongruenci modulo N; d hledáme jako by bylo N prvočíslo, pak uděláme zkoušku, pokud nevyjde, nebylo N prvočíslo a jsme zcela hotovi). Neexistuje-li takové d, zkusíme jiné c. Pak za P zvolíme —-násobek bodu [c, d, 1] v (£,+)■ Je-li P = [0,1,0], zvolíme jiné c atd. Je-li P 7^ [0,1, 0], vzhledem k tomu, že při výpočtu používáme jen vzorců ze druhé věty deváté kapitoly, platí P = [x, y, 1] pro nějaké x, y E R. Spočítáme g-násobek bodu P v (£,+)■ Jestliže nedostaneme [0,1, 0], není m řád křivky (£,0), Schoofův algoritmus tedy nedal správný výsledek a proto N není prvočíslo. Jestliže g-násobek bodu P je [0,1, 0], podle věty je N prvočíslo, pokud q je prvočíslo. To zjistíme rekurzívně (N0 = N, N\ je q pro N0, N2 je q pro N\, ...). S rekurzí skončíme v okamžiku, kdy Ni je dost malé na to, abychom ověřili jeho prvočíselnost pokusným dělením (to nastane v O(lniV) krocích vzhledem k Ni+Í < \Ní). Je třeba si uvědomit, že není-li Ni prvočíslo, skončíme jen v případě i = 0, pro i < 0 je třeba se vrátit k i — 1 a najít nové Ni. 2. Atkin. Jeho metoda je založena na teoretických výsledcích, které bohužel notně převyšují možnosti naší přednášky, proto jen informativně: nevolí křivky náhodně, ale volí speciální případ eliptických křivek, tzv. eliptické křivky s komplexním násobením. Výhoda metody je v tom, že je možné snadněji spočítat řád těchto křivek (vyhne se Schoofově algoritmu). Poznámky k časové náročnosti. Test Golwassera a Kiliána (objevený v roce 1986) má spíše teoretický význam; je možné dokázat (za jakýchsi rozumných předpokladů o rozložení prvočísel v krátkých intervalech, že očekávaný čas výpočtu je 0(ln12 N), tedy polynomiální (nejhorší možný čas výpočtu není možno stanovit, protože jde o pravděpodobnostní algoritmus). Atkinův test byl implementován Atkinem a Morainem v roce 1990 a je schopen dokazovat prvočíselnost čísel o zhruba 1000 dekadických cifrách v řádově týdnech strojového času na Sparc station. I v tomto případě je očekávaný čas výpočtu polynomiální (přesněji O(ln6A0). Další moderní test na prvočíselnost je tzv. metoda Jacobiho sum, která byla objevena v roce 1980 (Adleman, Pomeranče a Rumely) a dále zjednodušena a implementována v roce 1981 (Cohen a Lenstra). Existuje jak v pravděpodobnostní, tak v deterministické 11 POTREBNÉ VÝSLEDKY ANALYTICKÉ TEORIE ČÍSEL 24 verzi, která je však méně praktická. Pomeranče a Odlyzko dokázali, že čas výpočtu tohoto algoritmu je 0((ln jV)clnlnlnAÍ) pro jistou konstantu C. Tato časová náročnost se velmi blíží polynomiální (uvědomme si, že funkce lnlnln N roste velmi pomalu: lnlnln(1010) = 1.143145, lnlnln(10100) = 1.693632, lnlnln(101000) = 2.046633, lnlnln(1010000) = 2.307013). 11 Potřebné výsledky analytické teorie čísel Pro libovolné kladné reálné číslo x označme tt(x) počet prvočísel nepřevyšujících x. Je tedy tt(x) = 0 pro x E (0,2), TT (x) = 1 pro x E [2,3), tt(x) = 2 pro x E [3,5), atd. Následující důležitou, hlubokou a slavnou větu uvedeme bez důkazu. Její formulaci objevil Gauss v 18. století, avšak důkaz nenašel. Byla dokázána až na konci 19. století (v roce 1896 objevili důkaz nezávisle na sobě Hadamard a de la Vallée Poussin). Připomeňme, že \nx značí přirozený logaritmus. Věta. lim,,. 7r(ic) 1. x~>°° x/lnic Důkaz je mimo možnosti tohoto textu. Lze jej najít například v knize: T. Apoštol, Introduction to Analytic Number Theory, Springer-Verlag, Berlin, Heidelberg, New York 1986. Pro účely odhadu časové náročnosti algoritmu v příští kapitole vystačíme s následujícím snadnějším výsledkem, který už budeme schopni dokázat. Větu tohoto typu dokázal poprvé Čebyšev v roce 1852. Věta 1. Pro libovolné celé číslo N > 2 platí N ,»^ 3N 2 < tt(N) < log2N log2AT Připomeňme, že pro reálné číslo x značí [x] jeho celou část, která je jednoznačně určena podmínkami [x] E Z, 0 < x— [x] < 1. Dále pro libovolné přirozené číslo n a libovolné prvočíslo p je Vp{n) počet prvočinitelů v rozkladu čísla n, které jsou rovny p, neboli platí pvp^ | n a p l+up(n) n. Je zřejmé, že pro libovolné m,íieN platí up(mn) = vv{m) + vv{n). Lemma 1. Pro libovolné přirozené číslo n a libovolné prvočíslo p platí ^pfaO = Yl fc=i p Důkaz. Nejprve si všimněme, že suma na pravé straně je jen formálně nekonečná: je-li pk > n, platí [-^] = 0. Dále je třeba si uvědomit, že [-^j značí počet těch čísel z množiny {1,2,... ,n}, která jsou dělitelná číslem pk. A odtud plyne i důkaz: nejprve (pro k = 1) započítáme jednou všechny ty činitele v n\ = 1-2.....n, kteří jsou dělitelní p. Pak (pro k = 2) započítáme ještě jednou všechny ty činitele, kteří jsou dělitelní p2. Poté (pro k = 3) ještě jednou všechny ty činitele, kteří jsou dělitelní p3 atd. Libovolný činitel s je tedy započítán právě í/p(s)krát a tedy pravá strana dokazované rovnosti je rovna Yľ^=i up(s) = up(n^-)- Lemma 2. Pro libovolné přirozené číslo n a libovolné prvočíslo p platí: je-li £ = ^P((2™)), pak pe < In. Důkaz. Podle lemmatu 1 platí í (2n)\ (ň!)2 up((2n)\) - 2up((n\)2) oo fc=i 2n pk p 11 POTREBNÉ VÝSLEDKY ANALYTICKÉ TEORIE ČÍSEL 25 Pro libovolné reálné x takové, že x — [x] < |, platí [2x] = 2[x\. Je-li naopak x — [x] > |, platí [2x] = 2[x] + 1. Libovolný sčítanec v předchozí sumě je tedy 0 nebo 1. Přitom sčítance pro k takové, že pk > 2n, jsou zřejmě nulové. Je tedy í < max{fc e N; pk < 2n} a proto pe < 2n. Lemma 3. Pro libovolná přirozená čísla n, k taková, že 1 < k < | platí (J^) < Důkaz. Platí © _n-k + l >n/2 + l>h L-i) k - n'2 Lemma 4. Pro libovolné přirozené číslo n platí (^) < (2nY^2n\ Důkaz. Rozložme uvažovaný binomický koeficient na prvočinitele ( n) = p11 ...pkrT Libovolné prvočíslo, které se zde vyskytuje, dělí (2n)\ a je tedy menší než 2n. Proto r < 7v(2n) a podle lemmatu 2 každé p^ < 2n. Odtud plyne lemma. Lemma 5. Pro libovolné přirozené číslo n platí =^ < ( ™) < 2 Důkaz. Z binomické věty víme, že ^™0 (2™) = (l + l)2ra = 22ra, odkud plyne pravá nerovnost. Ukážeme-li, že v tomto součtuje sčítanec (2n) největší, dostaneme i levou nerovnost neboť ^ je aritmetický průměr 2n čísel (2Qra) + (2™) = 2, (21ra), (22ra), ..., Q2^). Ale to je snadné: platí (22™J = (2™) a pro libovolné 1 < i < n platí Q2™^ < (2™) podle lemmatu 3. Můžeme nyní dokázat dolní odhad z věty 1. Z lemmat 4 a 5 plyne O 2«, odkud zlogaritmováním a vydělením log2(2n) dostaneme 7r(2n) > lo 2%n) — 1 a dolní odhad věty 1 je dokázán pro sudá N = 2n. Je-li naopak N = 2n + 1 liché, užijeme odvozený odhad pro 7r(2n): ir(2n+l) > ir(2n) > —^— - 1 >-----^-----r - 1 > n ^ + 1 , - 2, V ;- V ;-log2(2n) log2(2n+l) log2(2n + l) což je dolní odhad věty 1 pro N = 2n + 1. Lemma 5. Pro libovolné přirozené číslo N > 1 platí YÍp Yim+2 3 a že lemma bylo dokázáno pro všechna 2 < m < N. Je-li N sudé, není N prvočíslo a z indukčního předpokladu pro m = N — 1 plyne j]p= n p<4w-2<4 p 9 platí pi... pk > 2k ■ k\. Důkaz. Přímým výpočtem lze ověřit, že p\.. .pg = 2 • 3 • 5 • • • 19 • 23 = 233092870 > 185794560 = 29 • 9!. Pro k > 9 užijeme indukci. Předpokládejme, že k > 9 a že pro k lemma platí. Zřejmě Pk+i > 2{k + 1), a tedy Pl.. .pk+l >2k-k\- 2{k + 1) = 2k+l ■ (k + 1)!, což jsme měli dokázat. Lemma 7. Pro libovolné přirozené číslo k platí k\ > (k/e)k. Důkaz. Vzpomeňme si z analýzy na Taylorův rozvoj funkce ex v nule: oo ,• Proto platí |j < Yľ^Ĺo fr = ßfc' °dkud plyne lemma. Můžeme nyní dokázat horní odhad z věty 1. Tuto nerovnost je možné snadno ověřit pro 2 < N < 26, budeme tedy předpokládat, že N > 27. Nechť k = ir(N), pak p1, ..., pk jsou právě všechna prvočísla nepřevyšující N. Lemmata 5, 6 a 7 dávají 4W > Yl P = Pi ■ ■ -Pk > 2fc • k\ > 2k ■ (f )k. p k ■ ((In k) + (In 2) - 1). Ukážeme nyní, že k < 2N/\d.N. Protože 3/log2A^ = 31n2/lniV > 2,07/lnA^, bude to pro důkaz věty 2 stačit. Předpokládejme tedy naopak, že k > 2N/liiN. Dosazením do předchozí nerovnosti dostaneme 2N (21n2) • N > —- ■ ((In2) + (lniV) - (lnlniV) + (ln2) - 1), a tedy (l-ln2)lniV< (lnlniV) - (21n2) + l. Ovšem funkce f(x) = (1 — ln2) ha x — (In ln x) + (2hi2) — 1, která je definovaná pro x > 1, splňuje /(27) > \ a má derivaci f'(x) = 1~^12 — ^^- Zřejmě f'(xo) = 0 jedině pro xo = ei/(i-in2) _l_ 26,02 a platí f'(x) > 0 pro x > xq. Je tedy f(N) > 0, spor. Věta 1 je dokázána. Věta 2. Pro libovolné přirozené číslo n > 2 platí YÍP<2nP > 2"', kde v součinu p probíhá všechna prvočísla nepřevyšující ln. Důkaz. Jako v důkaze lemmatu 4 rozložme binomický koeficient (^) na prvočinitele (n*) = Pí1 ■ ■ -Prr• Víme, že libovolné prvočíslo, které se zde vyskytuje, je menší než 2n. Je-li 12 DETERMINISTICKÝ POLYNOMIÁLNÍ TEST NA PRVOCÍSELNOST 27 Pi < \/~2~ň, užijeme odhad p^ < 2n z lemmatu 2. Je-li naopak pi > \f2Žň1 platí p2 > 2n, a odhad p/ < 2n z lemmatu 2 dává ki = 1. Užitím lemmatu 5 22n/(2n-26V*n). Abychom dokázali lemma, musíme ukázat, že 2n > 2n ■ 26a/2íi, neboli po zlogaritmování n — 1 — log2 n — 6y2n > 0. Uvažme funkci f(x) = x - 1 - log2x - 6V2x. Platí /(100) = 99 - log2 100 - 6V200 > 7 a derivace f'(x) = 1 — - —j= je větší než 1 — -^ — —^ > 0 pro x > 100. Tím jsme dokázali x ^/2x J 100 10^/2 lemma pro n > 100. Nerovnost sn > 2n pro hodnoty 2 < n < 100 je možné ověřit numericky. 12 Deterministický polynomiální test na prvočíselnost V létě roku 2002, přestože byly prázdniny, oběhla rychle světem zpráva, že byl konečně objeven dlouho hledaný algorimus, který v polynomiálním čase rozhodne, zda dané přirozené číslo je prvočíslem nebo ne. Jde o významný pokrok, přestože se zdá, že jeho využití je jen na teoretické úrovni - dříve známé algoritmy totiž pracují rychleji v rozsahu hodnot, pro které má smysl algoritmus spouštět. Zjednodušeně řečeno, polynomiálnost algoritmu zaručuje, že od jisté meze je rychlejší než jiný nepolynomiální. Je-li však tato mez je tak velká, že i na současných nejrychlejších počítačích by pro takto velká čísla trval výpočet déle než století, ztrácí tato výhoda praktický význam. Na druhou stranu pro teoretickou informatiku je důležité vědět, že nedeterministický algoritmus polynomiálního času skutečně existuje. Ve zmiňovaném článku pánové Agrawal, Kayal a Saxena z Kanpuru v Indii dokázali, že jejich algoritmus je polynomiálního času a pro každé přirozené číslo n dává správný výsledek. Při výkladu v této kapitole užívám velmi čitelně napsanou knihu [D]. Celý algoritmus je založen na následující větě: Věta 1. Nechť n > 1 je celé číslo, a je libovolné celé číslo nesoudělné s n. Pak n je prvočíslo právě tehdy, když v okruhu polynomů (Z/nZ)[x] nad okruhem zbytkových tříd modulo n platí (x + a)n = xn + a. Důkaz. Z binomické věty ra-l , x (x + a)n = xn + an + J2 (■ ) ďxn~l- (4) í=i ^ ' 12 DETERMINISTICKÝ POLYNOMIÁLNÍ TEST NA PRVOCÍSELNOST 28 Předpokládejme, že n je prvočíslo, pak z Fermatovy věty (důsledek věty 8 čtvrté kapitoly) plyne an = a (mod n). Dále pro libovolné i = 1,2,... ,n — 1 má binomický koeficient (™) = n(n- )..\n-i+ ) prv0Qs}0 n v čitateli a n \ i\, tedy (™) = 0 (mod n). Celkem tedy (x + a)n = xn + a. Nechť je nyní n složené číslo a zvolme prvočíslo p dělící n. Nechť s = vp(n), tj. přirozené číslo s je určené podmínkami ps \ n, ps+l \ n. Pak koeficient u xn~p v (4) fn\ _ n(n-l)...(n-p+l) \Pj P- není dělitelný ps (vždyť p \ a & p \ (n— 1)... (n — p+1)), a tedy není dělitelný n. To znamená (x + a)n ^ xn + a. Poznámka. Uvedená věta nabízí jednoduchou metodu na testování, zda je celé číslo n prvočíslo: zvolme a nesoudělné s n (například a = 1) a spočítejme pomocí rychlého umocňování v okruhu polynomů (Z/nZ)[x] mocninu (x + a)n. Tato metoda však není tak rychlá, jak se zdá na první pohled: v průběhu umocňování vzniká u polynomů, které jsou mezivýsledky, mnoho nenulových koeficientů. Vždyť stupeň polynomu, který má být naposledy umocňován na druhou, je nejméně 22y^L, a tedy může mít až ^^ nenulových koeficientů. To znamená, že počet prováděných operací nemůže být omezen shora ničím lepším než 0(n) a tedy tato metoda je horší než metoda pokusného dělení. Abychom dostali efektivní algoritmus, musíme místo rovnosti (x + a)n = xn + a kontrolovat jen kongruenci (x + a)n = xn + a (mod xr — 1), kde r je třeba nějak šikovně vybrat. Zbytek po dělení mocniny (x + a)n polynomem xr — 1 pak počítáme opět algoritmem rychlého umocňování, ale po každém násobení polynomů je každá mocnina Xs nahrazena mocninou xs , kde s' je zbytek po dělení čísla s číslem r. Přitom pracujeme v (Z/nZ)[x] takto: počítáme s polynomy ze Z[x] a po každém provedeném výpočtu redukujeme celočíselné koeficienty modulo n. Tím dodržíme polynomiální složitost výpočtu, budeme-li mít zaručeno, že přirozené číslo r je shora ohraničeno 0((log2 n)c) pro nějaké c. Je jasné, že je-li n prvočíslo, dávají (x + a)n a xn + a stejné zbytky po dělení polynomem xr — l, ať je r jakékoli. Hlavní problém při tvorbě tohoto polynomiálního algoritmu bylo ukázat, že pro libovolné neprvočíselné n existuje přirozené číslo r (shora ohraničené 0((log2 n)c)), pro které (x + a)n a xn + a dávají různé zbytky po dělení xr — 1. To se také skutečně podařilo pro libovolné n, které není mocninou prvočísla, nestačí však ověřit podmínku pro jedinou hodnotu a, ale pro všechna celá čísla a v jistém intervalu (jehož délka je opět ohraničena polynomiálně). To, že metoda „nepozná" mocniny prvočísel, nevadí: tato n rozpozná jednoduchý polynomiální algoritmus, který provedeme hned na začátku metody. Algoritmus (Agrawal, Kayal, Saxena). Pro dané přirozené číslo n > 1 algoritmus rozhodne, zda je n prvočíslo nebo složené. 1. [Mocniny] Pokud je n = ab, kde a, b E N, b > 1, vytiskni, že n je složené a skonči. Jinak polož r <— 2. 2. [První cyklus] Jestliže r > n, pak vytiskni, že n je prvočíslo a skonči. Jestliže r\n, pak vytiskni, že n je složené a skonči. Jinak pro každé i od 1 do [4(log2 n)2] prověřuj: jestliže pro všechna taková i platí n% ^ 1 (mod r), pokračuj krokem 3, jestliže naopak pro nějaké takové i platí n% = 1 (mod r), pak nejmenší prvočíslo větší než r ulož dor a znovu prováděj krok 2. 3. [Druhý cyklus] Pro a od 1 do [2y/rlog2 n] prováděj: jestliže pro některé takové a platí (x + o)n ^ (xn + o) (mod xr - 1) v (Z/nZ) [x], 12 DETERMINISTICKÝ POLYNOMIÁLNÍ TEST NA PRVOCÍSELNOST 29 pak vytiskni, že n je složené a skonči. 4. [Závěr] Vytiskni, že n je prvočíslo a skonči. Důkaz správnosti algoritmu. Nejprve si promysleme, že nikdy na začátku kroku 2 nemůže být r > n. Protože r prochází postupně všechna prvočísla, znamenalo by to, že n je složené, ale pak by se algoritmus musel zastavit již dříve, když r se rovnalo nejmenšímu prvočíslu, které dělí n. Je tedy jasné, že pokud algoritmus skončí v kroku 1, 2 nebo 3, jistě odpoví správně. Zbývá dokázat, že i v kroku 4 je odpověď správná. To však vzhledem k tomu, že proběhl krok 1, je zaručeno následující větou, kterou dokážeme později v této kapitole (definici řádu čísla n modulo r je možné najít za větou 9 čtvrté kapitoly). Věta 2. Nechť n a r jsou celá čísla splňující všechny následující podmínky: (a) n > 3; (ß) r je prvočíslo a r < n; (7) pro každé a splňující 2 < a < r platí a\n\ (ô) řád čísla n modulo r je větší než 4(log2 n)2; (e) (x + a)n = (xn + a) (mod xr — 1) v (Z/nZ)[x] pro všechna 1 < a < 2-\/řlog2 n. Pak n je mocninou prvočísla. Odhad časové náročnosti algoritmu. První krok algoritmu lze provést například takto: Algoritmus (Test na mocninu). Pro dané celé číslo n > 3 algoritmus rozhodne, zda n = ab, kde a, b E N, b > 1. 1. [Inicializace] Polož &<—2,a<—l,c<—n. 2. [Výpočet mocniny] Polož m <— [q^\ a rychlým umocňováním spočti d <— min{m6, n + 1}. 3. [Aktualizace mezí a, c] Je-li d = n, vytiskni zprávu, žen = mb je mocninou a skonči. Jinak, je-li d < n, polož a <— m, v opačném případě polož c <— m. Je-li c — a > 2, pokračuj bodem 2, jinak bodem 4. 4. [Zvýšení exponentu b] Nejmenší prvočíslo větší než b ulož do b. Je-li 2b > n, vytiskni zprávu, že n není mocninou a skonči. Jinak polož a <— 1, c <— n a pokračuj bodem 2. Tento algoritmus je jistě správný, v průběhu výpočtu neustále platí ab < n < cb a rozdíl c — a se zmenšuje, dokud není c — a = 1. Výpočet mocniny v kroku 2 se provádí binárním umocňováním (viz šestou kapitolu), jakmile se však v průběhu výpočtu objeví čísla větší než n, výpočet se přeruší a vrací se hodnota n+1. Protože pro dané b se rozdíl c— a půlí každým průchodem kroky 2 a 3, provedou se zhruba log2 n krát. Rovněž počet kontrolovaných b je možné omezit shora číslem log2 n (tato malá prvočísla budou uložena v tabulce, takže čas pro provedení kroku 4 je konstantní, jakmile se jednou provždy spočítá horní hranice [log2 n] pro b). V průběhu celého algoritmu je tedy třeba provést 0((log2 n)2 log2 log2 n) násobení čísel menších než n, počet potřebných bitových operací lze odhadnout shora 0((log2 n)4 log2 log2 n). Zaměřme se nyní na druhý krok algoritmu, který hledá vhodné r. Označme p(n) největší r, pro které je prováděn krok 2 algoritmu, je-li na vstupu n. Z následující věty plyne, že piji) < 20(log2n)5. Věta 3. Pro libovolné přirozené číslo n>2 existuje prvočíslo r < 20(log2n)5 takové, že buď r I n anebo platí r \n a současně řád čísla n modulo r je větší než 4(log2 n)2. Důkaz. Můžeme předpokládat, že n > 4, neboť pro menší n věta zřejmě platí. Označme L = log2 n a P = nl=i \n% ~ !)• Zřejmě [4L2] p < TT ni = n[4L2][4L2+l]/2 = 2L[4L2][4L2+l]/2 < 2L(4L2)(4L2+l)/2 = 28L5+2L3_ í=l 12 DETERMINISTICKÝ POLYNOMIÁLNÍ TEST NA PRVOCÍSELNOST 30 Z věty 2 jedenácté kapitoly plyne dolní odhad pro součin všech prvočísel p nepřevyšujících 20L5 u p> n p > 2[iol5] > 2iol5-1. p<[20L5] p<2[10L5] Ovšem L > 2 a tedy 2L5 - 1 > 2L3, odkud p<[20L5] To znamená, že existuje prvočíslo r < [20L5] takové, že r \ P, a tedy pro všechna přirozená čísla z < 4L2 platí r f n1 — 1. Pokud r f n, znamená to, že řád čísla n modulo r je větší než 4L2, což jsme chtěli dokázat. Pro provádění druhého kroku algoritmu potřebujeme tabulku prvočísel nepřevyšujících 20(log2n)5. Takovou tabulku budeme mít předem připravenu, ale započítejme do celkového odhadu časové náročnosti i její tvorbu. Máme-li připravit tabulku prvočísel menších než m pomocí Eratosthenova síta, sestavíme tabulku všech přirozených čísel od 2 do m a opakujeme toto: první neškrtlé číslo p vyznačíme jako prvočíslo a všechny jeho násobky počínaje p ■ p až po p ■ [—] škrtneme. To děláme až do doby, kdy je první neškrtlé číslo větší než \fm\ pak všechna zbylá neškrtla čísla jsou prvočísla. Počet škrtání (a tedy i aritmetických operací) lze odhadnout shora číslem (užitou nerovnost ^_x ^f > l/i lze odvodit tak, že nahradíte funkci 1/x na uvažovaném intervalu jejím minimem l/i) v-^ rn v-^ 1 v~^ P dx rwm\ dx — m y — < m y^ - 4(log2n)2, tj. \fř- > 21og2 n a tedy z (7) dostáváme p > r > í a r \n. (5) 12 DETERMINISTICKÝ POLYNOMIÁLNÍ TEST NA PRVOCÍSELNOST 31 Budeme se zabývat součiny mocnin polynomů x + a E ¥p[x] pro 1 < a < £, zaveďme proto označení P = \f[(x + a)6a; 6« eZ,ba>o\c ¥p[x]. ^(1=1 J Pro stručnost vyjadřování zaveďme zkratku I(u, f) znamenající výrok tiel, / G ¥p[x], {f{x))u = f(xu) (mod xr - 1) v Fp[z]. Například pro f = x + a, kde 1 < a < £, platí 7(n, /) díky p | n a podmínce (e) a současně platí též I(p, f) díky větě 1. Než budeme pokračovat v důkaze věty 2, dokážeme dvě snadná tvrzení: Lemma 1. Z I(u, /) a I(v, /) p/?/ne /(tw, /). Důkaz. Umocněním kongruence z I(u, /) dostáváme (/Cr))™ = (/Or"))" (mod xr - 1). Dosazením X Zet liy do kongruence z i"(i>, /) dostáváme (/(xu))w = (/(O) (mod^-l). Protože xr — 1 | xur — 1, platí tato kongruence i modulo xr — 1, a proto odtud plyne /(tro, /). Lemma 2. Z I(u, f) a I(u, g) plyne I(u, fg). Důkaz. Stačí vynásobit obě kongruence, které dostáváme z I(u, f) a I(u, g) a využít toho, že (f-g)(xu) = f{xu)-g{xu). Pokračujme dále v důkaze věty 2. Označme U = {rŕpi; i, j E Z, i > 0, j > 0}. Z předchozích příkladů a lemmat plyne (f(x))u — f(xU) (mod xr — 1) pro všechna f E P a všechna u E U. (6) Polynom xr~l + xr~2 + • • • + x + 1 G ¥p[x] rozložme v ¥p[x] na normované ireducibilní faktory. Jeden z nich označme h. Je tedy h E ¥p[x] normovaný ireducibilní polynom dělící xr~l + xr~2 + • • • + x + 1 a tedy i xr — 1. Označme d stupeň polynomu /i. Těleso F = ¥p[x]/(h) má tedy pd prvků a jeho prvek ( = x + (/i) je kořenem polynomu h (viz poznámku za větou 13 čtvrté kapitoly) a tedy i polynomu xr — 1. Protože p f r, není 1 kořenem polynomu xr~l + xr~2 + • • • + x + 1, a tedy ( ^ 1. Proto řád ( v Fx je r. Označme G množinu hodnot polynomů z P v (, tj. G = {/(C); / G P} c F. Lemma 3. Pro 1 < a < í jsou x + a různé polynomy z ¥p[x]. Důkaz. Je-li 1 < a < a' < £, pak 0 < a' — a < £ < p podle (5) a tedy skutečně a a a' jsou různé prvky tělesa Fp = Z/pZ. Lemma 4. Pro každé f E P a každé u E U piati f(()u = f((u)- Důkaz. Z (6) vime, že existuje polynom q E ¥p[x] splňující (/»r = /co + (^r -1) • q- 12 DETERMINISTICKÝ POLYNOMIÁLNÍ TEST NA PRVOCÍSELNOST 32 Dosazením ( Zet X dostáváme dokazované. Označme T = {(u; u E U} C Fx a t = \T\. Lemma 5. Platí r > t > 4(log2 n)2. Důkaz. Protože ( má řád r, platí T C {1,(,... , C"-1}. Ovšem r \ u dle definice U a (5), a tedy 1 ^ T. Proto t < r. Jistě (nZ E T pro každé i > 0. Protože ( má řád r, platí (ní = (^ právě tehdy, když n1 = nj (mod r), což je podle věty 9 čtvrté kapitoly ekvivalentní s i = j (mod e), kde e je řád čísla n modulo r. Proto (n ,(n ,..., (ne jsou různé prvky T a předpoklad (ô) dává ŕ > e > 4(log2 řr,)2. Lemma 6. Jsou-li f\ a f2 různé polynomy z P a oba mají stupeň menší než t, pak Důkaz. Předpokládejme naopak, že fi(() = /2(C)- Pak Pro každé u E U z lemmatu 4 plyne f\((u) = fi(()u = /^(C)" = Í2((u), a tedy libovolný prvek z T je kořenem polynomu /i — f2- Tento polynom má tedy alespoň t kořenů a jeho stupeň je menší než t, proto f\ = f2 (viz např. [R], věta 6.7, str. 87). Lemma 7. Platí \G\ > |n2A Důkaz. Nechť \i = min{£, t — 1}. Z věty o jednoznačném rozkladu polynomů v ¥p[x] na ireducibilní faktory a z lemmatu 3 plyne, že n^iO*- + a)&a> ^e ^« e {0> 1}> Jsou různé polynomy z P stupně menšího než t. Podle lemmatu 6 jsou jejich funkční hodnoty v ( různé a z toho plyne odhad |G| > 2ß. Jsou dvě možnosti. Je-li ß = £, platí díky odhadu r > t z lemmatu 5 ß = [2i/rlog2 n] > 2\fřlog2 n — 1 > 2vílog2 n — 1. Je-li naopak ß = t — 1, platí díky odhadu ŕ > 4(log2 n)2 z lemmatu 5 ß = t — 1 > 2\[t log2 n — 1. V obou případech dostáváme IGI > 2^ > 22^/*log2Íl_1 = —n2^ I I - 2 a lemma je dokázáno. Označme UQ = {rip>; i,jeZ,0 Vi = t, na druhou stranu z lemmatu 8 plyne |ř70| < 1^1 = t. Znamená to, že existují různé dvojice (i, j) a (k, m) takové, že i, j, k, m E {0,1,..., [Vi]} a že nl,pj = nkpm. Lze navíc předpokládat, že i > k. Kdyby i = k, muselo by platit i j = m a dvojice by nebyly různé. Je tedy i > k a platí nl~k = pm~j. Odtud plyne, že v rozkladu čísla n na prvočinitele se nevyskytují jiná prvočísla než p a tedy n je mocninou prvočísla p. Věta 2 je dokázána. 13 HLEDANÍ NETRIVIÁLNÍHO DĚLITELE - LEHMANNOVA METODA 33 (1) x2 — y2 = AkN, l x= 1 (mod 2); 2\k (3) 00. 13 Hledaní netriviálního dělitele — Lehmannova metoda Předpokládejme, že máme dáno přirozené číslo N, o němž víme, že je složené. Naším úkolem je nalézt netriviálního dělitele čísla N. Odhadněme nejprve časovou náročnost metody pokusného dělení: je třeba číslo N postupně vydělit všemi prvočísly nepřevyšujícími v^V- Každé takové dělení zabere čas řádu 0(ln2 N), celá metoda je tedy řádu 0(N? In2 N). První metoda, jejíž čas je lepší než právě uvedený, byla navržena Lehmannem. Je založena na následující větě. Věta (Lehmann). Nechť N je liché přirozené číslo, N = pq, kde p < q jsou prvočísla. Pak existují celá čísla x, y, k tak, že platí x = k + N (mod 4); Jestliže naopak pro dané liché přirozené číslo N = pq, kde p, q jsou prvočísla, máme celá čísla x, y, k splňující podmínky (1), (2) a (3), pak jeden z největších společných dělitelů (x + y, N) a (x — y, N) je roven p a druhý q. Rovněž platí, že je-li N liché prvočíslo, pak žádná trojice celých čísel x, y, k splňujících podmínky (1), (2) a (3) neexistuje. Důkaz pomocí teorie dobrých aproximací, který objevil Don Zagier, je uveden na konci kapitoly 18 o řetězových zlomcích (str. 46). Použití věty. Mějme dáno liché přirozené číslo N, o kterém je známo, že to není prvočíslo. Metodou pokusného dělení ověříme, že N není dělitelné prvočísly nepřevyšujícími yN, anebo najdeme netriviálního dělitele. Tato část algoritmu je tedy řádu 0(Nz ln2 N). Pokud N nemá prvočíselného dělitele menšího než \/Ň, musí být tvaru N = pq, kde p, q jsou prvočísla. Budeme pak postupně volit k E {1, 2, ..., [v^V]} a pro každé takové k necháme x proběhnout všechna celá čísla splňující podmínky (2) a (3) z předchozí věty. Pro každé takové x pak testujeme, zda x2 — 4kN je druhá mocnina přirozeného čísla. Pokud ano, označíme y = \/x2 — AkN a spočítáme (x + y, N), což je p nebo q. Je jasné, že časová náročnost algoritmu závisí na tom, jak rychle jsme schopni rozhodnout, zda přirozené číslo je nebo není druhou mocninou. Cesta vedoucí přes výpočet reálné odmocniny, zaokrouhlení a zkoušku jistě není ta pravá. Algoritmus (Celočíselná druhá odmocnina). Pro dané přirozené číslo n algoritmus najde přirozené číslo m splňující m2 < n < (m + l)2. 1. [Inicializace] Polož x <— n (viz též diskusi za algoritmem). 2. [Krok] Pomocí celočíselného dělení a posunu spočítej y <— [(x + [f ])/2]. 3. [Konec?] Je-li y < x, polož ix-f/a jdi na 2. Jinak vytiskni x a skonči. Důkaz algoritmu. Podle kroku 3 hodnota proměnné x klesá, algoritmus se tedy zastaví. Ukažme, že výsledek, který dává, je správný. Protože x E Z, platí [(x + [f ])/2] = [(x + f )/2]. Označme q = [\/n\- Protože \(t — \fň)2 > 0 pro libovolné t > 0, platí \{t + j) > \fň, tedy x > q je splněno v průběhu celého algoritmu. Předpokládejme, že se algoritmus zastavil, tj. že y = [(x + f )/2] > x a dokažme x = q. Předpokládejme x > q + 1. Pak x > \fn~ a platí y-x= [-(x + ^)]-x= [-(^ - x)] = [—(n - x2)] < 0, 13 HLEDANÍ NETRIVIÁLNÍHO DĚLITELE - LEHMANNOVA METODA 34 spor. Časová náročnost celočíselné odmocniny. V kroku 1 je jistě výhodnější místo n zvolit číslo bližší \fň. Vhodné může být např. zjistit řád e nejvyšší dvojkové cifry n, tj. přirozené číslo e splňující 2e < n < 2e+1 a položit x <— 21+^. Pak totiž x2 < 2e+2 < An, x2 > 2e+1 > n, tj. \fň < x < 2^/řt. Po provedení kroku 2 pak platí x - v = - [£(n - x2)] ^ ~hin - %2) = = ±(x + Vň)(x - ^/ň) > ±(x + § )(x - Vň) = \{x - ^/ň). V každém dalším provedení kroku 3 se hodnota x — ^/n zmenší alespoň čtyřikrát, neboť y — \fn~ = (x — \/n) — (y — x) < \{x — \/n) a tedy krok 3 provádíme řádově 0(lnn)-krát. Protože celočíselné dělení je řádu 0(ln2 n), je celý algoritmus řádu 0(ln3 n). Pokud nás, podobně jako v případě Lehmannova algoritmu, zajímá jen to, zda n je či není druhou mocninou přirozeného čísla, je možné rozhodování zrychlit: zjistíme, zda je n kvadratickým zbytkem modulo nějaké zvolené číslo m (tj. zda má řešení kongruence x2 = n (mod m) - pokud n je druhou mocninou přirozeného čísla, tato kongruence řešení mít musí). Budeme postupovat takto: vydělíme číslo n číslem m se zbytkem a získaný zbytek porovnáme s tabulkou všech kvadratických zbytků modulo m, kterou budeme mít předem spočítánu v paměti. Vhodným modulem může být například číslo 1989 = 32 • 13 • 17 nebo 1925 = 52 • 7 • 11. Podle věty 15 a věty 5 čtvrté kapitoly je pravděpodobnost, že náhodně zvolené přirozené číslo je kvadratický zbytek modulo 1925, rovna M ' f ' II = T^' Pro m°dul 1989 je dokonce rovna | • ^ • ^ = J|-. Provedeme-li test pro oba moduly, poběží předchozí algoritmus jen s pravděpodobností g||g, tedy jen asi v 1,7% případů. Algoritmus (Naplnění tabulek kvadratických zbytků). Algoritmus sestaví vektory Ti o délce 1989 a T2 o délce 1925 tak, že pro každé 1 < i < 1988 platí Ti [i] = 1 právě když kongruence x2 = i (mod 1989) má řešení a pro každé 1 < i < 1924 piatí T2[i] = 1 právě když kongruence x2 = i (mod 1925) má řešení. 1. [Naplň Ti] Pro i od 0 po 1988 polož Tx \i] <- 0. Pak pro i od 0 po 994 polož Ti [i2 mod 1989] <- 1. 2. [Naplň T2] Pro i od 0 po 1924 polož T2\i] <- 0. Pak pro i od 0 po 962 polož T2[i2mod 1925] <- 1. Algoritmus (Test na čtverec). Pro dané přirozené číslo n algoritmus zjistí, zda je n druhá mocnina přirozeného čísla, a pokud ano, vytiskne \fn~. 1. [Test na 1989] Polož r <— n mod 1989. Je-li T\[r] = 0, odpověz, že n není druhá mocnina přirozeného čísla a skonči. 2. [Test na 1925] Polož r <— n mod 1925. Je-li T2[r] = 0, odpověz, že n není druhá mocnina přirozeného čísla a skonči. 3. [Spočítej odmocninu] Algoritmem celočíselné druhé odmocniny spočítej m = \\/n\. Je-li n 7^ m2, odpověz, že n není druhá mocnina přirozeného čísla a skonči. Jinak odpověz, že n je druhá mocnina přirozeného čísla m a skonči. Časová náročnost Lehmannova algoritmu. Odhadněme počet hodnot, které musíme za x dosazovat pro pevně zvolené k E {1, 2, ..., [v7^]}- Odhadneme-li x + 2VEŇ > A^/kŇ pomocí (3) ve výrazu /— x2-AkN NI 1 [W x _ 2ykN =_______■== <_____• ——== =______• \ /__ x + 2Vk~Ň [ffif] AVkŇ 4[v/ÍV] V k ' 14 HLEDANÍ NETRIVIÁLNÍHO DĚLITELE - POLLARDOVA p METODA 35 dostáváme, že x splňuje 'N 2VkN < x < 2VkN fŇ] V k patří tedy x do intervalu délky 3V- a/^ • Délka intervalu je řádu 0(k~^Ně), pro pevné k je tedy časová náročnost algoritmu řádu 0{k~?N& ln3 N). Sečtením přes všechna k dostáváme, že celková časová náročnost je řádu 3/]V] OÍNhn3N^2 fc-sV fc=i Přitom Ji k 2dk = [2k^][ = 2y/ř —2, volbou r = \HV upravíme řád časové náročnosti hledání čísel k, x, y do tvaru OÍN* ln3 N ■ VŇPj = 0(N* In3 N). Protože časová náročnost první části algoritmu, totiž metody pokusného dělení čísly nepřevyšujícími \/Ň~, je řádu 0{N^\v? N), je celková časová náročnost Lehmannova algoritmu řádu 0(N 3 ln3 N). Lehmannova metoda je tedy asymptoticky výrazně lepší než algoritmus pokusného dělení, jehož časová náročnost je řádu 0{N? In2 N). 14 Hledání netriviálního dělitele — Pollardova p metoda Předpokládejme, že M je konečná množina a / : M —► M zobrazení. Zvolme Xq G M a pro každé n G N položme xn = /(xn_i). Protože je M konečná, v posloupnosti (^ra)^L0 nemohou být všechny prvky různé. Nechť i G NU {0} je nejmenší index, pro který existuje nějaký index n > i s vlastností Xi = xn. Dále označme j nejmenší takové n. Pak i nazýváme předperioda a j — i perioda posloupnosti (xn)^=0. Je možné dokázat, že střední hodnota předperiody i periody (mají-li všechny dvojice (xq, /) G M x MM stejnou pravděpodobnost) je řádu 0(y/\M\). Základní myšlenka Pollardovy p metody je následující: nechť f(x) je mnohočlen s celými koeficienty. Hledáme (neznámého) prvočíselného dělitele přirozeného čísla N, o kterém víme, že je složené. Zvolme celé číslo x0 a počítejme xn = /(xn_i) mod N. Pak ovšem yn = xn modp vyhovuje téže rekurzi modulo p. Pokud se / chová jako náhodné zobrazení (což nevíme, ale budeme to předpokládat), je předperioda a perioda posloupnosti (j/ri)^L0 řádu 0(-s/p), kdežto předperioda a perioda posloupnosti (^n)^L0 Je řádu řádu 0(a//V). Dá se tedy čekat, že existují i < j tak, že yi = yj, ale Xi ^ Xj. Pak ovšem je (xí — Xj, N) netriviální dělitel čísla N. Je nutné nějak zvolit Xo a /. Volba xo se zdá být nepodstatná, ne však volba /. Je vhodné, aby / byl jednoduchý polynom pro výpočet, lineární se však nezdá být vhodný. Promysleme si situaci s lineárním polynomem f(x) = ax + b. Vzhledem k tomu, že celá čísla a, b budeme volit, je rozumné očekávat, že se nepodaří zvolit a ani x0 soudělné s N; je-li (a, N) = 1, je / : Z/NZ —► Z/NZ bijekce a tedy předperioda je nulová, periodu je kromě triviálních případů (6 = 0 nebo a = ±1) obtížné určit. Budeme tedy volit / jako co nejjednodušší kvadratický polynom. Volba f = x2 vhodná není (promyslete si sami, že pro ip(N) = 2e • / s lichým / bude v případě (x0, N) = 1 předperioda menší nebo rovna e a perioda dělitelem čísla r, kde r je nejmenší přirozené číslo splňující 2r = 1 (mod/)). Podobně polynom / = x2 — 2 není vhodný, neboť pokud bychom náhodou zvolili x0 ve tvaru x0 = u + tí-1, 15 HLEDÁNÍ NETRIVIÁLNÍHO DĚLITELE - POLLARDOVA P - 1 METODA 36 bylo by x\ = f(xo) = (u + u~1)2 — 2 = u2 + u~2 atd. Perioda by tedy byla dělitelem periody pro / = x2 a xo = u (je možné dokázat, že podíl těchto period je tvaru 2e, kde e je menší nebo rovno počtu prvočíselných dělitelů čísla N). Je ověřeno experimentálně, že polynom / = x2 + c, kde c^Oac^ —2, pracuje docela dobře, i když nejsme schopni určit ani periodu ani předperiodu. Je jasné, že uchovávání všech již vypočtených členů posloupnosti {xn)^=0 a JeJicn neustálé porovnávání s nově vypočtenou hodnotou by bylo velmi zdlouhavé. Jednoduchou metodou, jak se tomuto zdlouhavému výpočtu vyhnout, je porovnávat postupně xn a X2n- Pak totiž prvočíselného dělitele p čísla N objevíme nejpozději po k krocích, kde k je součet předperiody a periody posloupnosti modulo p. Znamená to počítat iterace dvou posloupností: položit Zq = Xo, iterovat xn = f(xn-i) mod N a zn = f(f(zn-i)) mod N a počítat (xn — zn, N). Za (nedokázaného) předpokladu, že / se chová jako náhodné zobrazení, je počet nutných kroků 0(-s/p). V každém kroku počítáme třikrát /, dvakrát zbytek po dělení N a jednou největší společný dělitel, vše je 0(ln2 N) Celková časová náročnost je tedy 0(-s/pln2 N), což vzhledem k p < \^Ň dává 0(\^Ňln2 N). Je vhodné si uvědomit, že podobně jako metoda postupného dělení je i tato metoda citlivá k velikosti prvočíselných dělitelů - „malé" dělitele čísla N odstraňuje rychleji než „velké". 15 Hledání netriviálního dělitele — Pollardova p — 1 metoda Tato metoda je schopna najít i značně velké prvočíselné dělitele p čísla N, pokud p — 1 není dělitelné příliš velkou mocninou prvočísla. Definice. Nechť B je přirozené číslo. Řekneme, že přirozené číslo n je B-hladké, jestliže pro libovolné prvočíslo p a libovolné přirozené číslo k platí pk | n => pk < B. Celá medoda je založena na následující myšlence: přepokládejme, že pro nějaký prvočíselný dělitel p čísla N platí, že číslo p — 1 je S-hladké pro nějaké nepříliš velké přirozené číslo B. Zvolme libovolně 1 < a < N. Je-li (a,N) > 1, jsme hotovi. Budeme proto předpokládat, že (a, N) = 1. Pak podle definice číslo p— 1 dělí nejmenší společný násobek Lb čísel 1, 2, 3,..., B. Z Fermatovy věty pak plyne aLß = 1 (mod p) a tedy (aLß — 1, N) > 1. Budeme tedy testovat poslední podmínku pro zvyšující se hodnoty exponentu e | LB (budeme postupně umocňovat na faktory z kanonického rozkladu čísla Lb)- Je velmi nepravděpodobné, že poprvé, kdy platí (ae — 1,N) > 1, je tento největší společný dělitel roven N. Může se ovšem stejně stát, že metoda selže, jestliže pro žádné prvočíslo p \ N číslo p — 1 není £>-hladké. Při výpočtu zabere nejvíce času výpočet největšího společného dělitele, proto budeme postupovat tak, že budeme uchovávat součiny a počítat největší společný dělitel jen čas od času. Algoritmus (Pollardova p—1 metoda, první stadium). Nechť N je složené číslo, B předem daná hranice. Algoritmus zkouší najít netriviálního dělitele N. Má naději na úspěch, pokud existuje prvočíslo p \ N, pro které p — 1 je B-hladké. Předpokládáme, že máme tabulku p[l], p[2],... , p[k] všech prvočísel menších nebo rovných B. 1. [Inicializace] Polož x <— 2, y <— x, P <— 1, c <— 0, i <— 0, j <— i. 15 HLEDÁNÍ NETRIVIÁLNÍHO DĚLITELE - POLLARDOVA P - 1 METODA 37 2. [Další prvočíslo] Polož i <— i + 1. Je-li i > k, spočti největší společný dělitel g <— (P, N). Je-li g = 1, vydej zprávu, že algoritmus neuspěl a skonči, jinak polož i <— j, x <— y a jdi na 5. V opačném případě (tj. pro i < k) polož q <— p[i], qx <— q, l <— [—]. 3. [Spočti mocninu] Dokud q\ < l, dělej q\ ^ q\ ■ q. Pak polož x <— x91 mod N, P <— P • (x — 1) mod iV, c <— c + 1 a je-li c < 20, jdi na 2. 4. [Největší společný dělitel] Polož g <— (P, N). Je-li g = 1, polož c <- 0, j <- j, )/ <- i a jdi na 2. Jinak polož i <— j, x <— y. 5. [Počítej znovu] Polož z <— z + 1, g <— p[ž], (?i <— 1), je-li g < N, vytiskni g a skonči. Konečně, je-li g = N (což nastane s velmi malou pravděpodobností), vytiskni zprávu, že algoritmus neuspěl a skonči. Poznamenejme, že pokud algoritmus selhal v bodě 6, znamená to, že všechna prvočísla p dělící N byla nalezena současně, což je značně nepravděpodobné. Může proto mít smysl zkusit tentýž algoritmus s jinou počáteční hodnotou (např. x <— 3). I v této jednoduché formě jsou výsledky algoritmu působivé. Samozřejmě, jsou-li p < q prvočísla zhruba stejně velká taková, že i 2p+l a 2q+l jsou prvočísla, pro N = (2p+l)(2q + í) by algoritmus rozložil N jen pro B > p. Uspěl by tedy za dobu srovnatelnou s algoritmem pokusného dělení. Obvyklé hodnoty B jsou mezi 105 a 106. Druhé stadium. Požadavek, aby existovalo prvočíslo p \ N takové, že p— 1 je £>-hladké, je poměrně silný. Má proto smysl jej zeslabit a požadovat jen, aby bylo p — 1 zcela rozloženo po pokusném dělení do hranice B, tj. požadovat, aby p — 1 = / • q, kde / je S-hladké a q je prvočíslo větší než B (ale zase ne příliš velké). Pro naše účely budeme předpokládat, že / je £>i-hladké a prvočíslo q splňuje B\ < q < B2, kde B\ je naše staré B a B2 je o dost větší konstanta. Samozřejmě, že bychom p objevili i předchozím algoritmem pro B = B2, ale to by trvalo příliš dlouho. Podobně jako předtím nyní platí (aqLß — 1,N) > 1. Budeme postupovat takto: po ukončení prvního stadia (tj. předchozího algoritmu) máme spočítáno b = clLb mod N. Předpokládejme, že máme uloženy rozdíly prvočísel od B\ do B2. Tyto rozdíly jsou malé a je jich nemnoho. Můžeme proto snadno předpočítat bd pro všechny možné rozdíly d a získat bq postupným donásobováním původní mocniny b předpočítanými hodnotami bd. Znamená to, že pro každé prvočíslo mezi B\ a B2 nahradíme umocňování pouhým násobením, které je samozřejmě mnohem rychlejší. Algoritmus (Pollardova p — 1 metoda, druhé stadium). Nechť N je složené číslo, B\ a B2 předem dané hranice. Algoritmus zkouší najít netriviálního dělitele N. Má naději na úspěch, pokud existuje prvočíslo p \ N, pro které p — 1 je B\-hladké nebo je to B\-hladký násobek prvočísla mezi B\ a B2. Předpokládáme, že máme tabulku p[l], p[2],..., p[k\] všech prvočísel menších nebo rovných Bx a tabulku d[l], d[2],..., d[k2] všech diferencí prvočísel mezi Bi a B2 tak, že d[l] = p[k\ + 1] — p[k\\ atd. 1. [První stadium] Pro B = B\ (a k = k\) zkus rozložit N pomocí předchozího algoritmu. Jestliže tento algoritmus uspěje, skonči. V opačném případě jsme tímto algoritmem získali x. Polož b <— x, P <— 1, c <— 0, i <— 0, j <— i. 2. [Předpočítání] Pro všechny hodnoty rozdílů d[i] (které jsou malé a je jich málo) spočítej a ulož 6dW. Polož x <— £p[fcl] mod N, y <— x. 16 HLEDÁNÍ NETRIV. DĚL. - LENSTROVA METODA ELIPTICKÝCH KŘIVEK 38 3. [Vpřed] Polož i^i + 1, x^x- bd^ (pomocí předpočítané hodnoty bd^), P <— P ■ (x — 1) mod N, c <— c + 1. Je-li i > k2, jdi na 6. Jinak, je-li c < 20, jdi na 3. 4. [Největší společný dělitel] Polož g <— (P, N). Je-li g = 1, polož c<-0, j<-i, )/<-3;a jdi na 3. 5. [Počítej znovu] Polož i <— j, x <— y. Pak opakuj x <— x ■ bd^\ z <— z + 1, g <— (x — 1, N) dokud nenastane g > 1 (což musí nastat). Je-li g < N, vytiskni g a skonči. Jinak (tj. je-li g = N, což nastane s velmi malou pravděpodobností), vytiskni zprávu, že algoritmus neuspěl (nebo zkus znovu pro x <— 3 místo i<-2v kroku 1 prvního stadia) a skonči. 6. [Neuspěl jsi?] Polož g <— (P, N). Je-li g > 1, jdi na 5. V opačném případě (tj. je-li g = 1), vytiskni zprávu, že algoritmus neuspěl a skonči. V této formě je algoritmus mnohem efektivnější než ve formě pouze prvního stadia. Obvyklé hodnoty konstant jsou B\ = 2 • 106, B2 = 108. Algoritmus je založen na aritmetice grupy F*. Podobně lze pracovat i v Fx2/F*, v tomto případě je požadována S-hladkost čísla p+1 místo p — 1. Je možné samozřejmě pracovat i v F*4/F*2 nebo F*3/F£ nebo F*6/(F*2 • F£3) s požadavkem S-hladkosti čísla p2 + 1 nebo p2 +P+ 1 nebo p2 —p+1. To už jsou ale mnohem větší čísla a splnění požadavku S-hladkosti těchto čísel je méně pravděpodobné. Potřebujeme proto další grupy, jejichž řád je zhruba p, ve kterých jsme schopni pracovat (aniž známe prvočíslo p). Takovými grupami jsou grupy eliptických křivek nad Fp. 16 Hledání netriviálního dělitele — Lenstrova metoda eliptických křivek Mějme opět dáno složené přirozené číslo N, které chceme rozložit. Je přirozené předpokládat, že (iV, 6) = 1. Zvolme a, b e Z tak, aby (4a3 + 27b2, N) = 1. Pak rovnice y2z = x3 + axz2 + bz3 (kde bychom správně měli psát a + NZ, b + NZ místo a, b) nám určuje „eliptickou křivku" (S,0) nad Z/NZ, přičemž O = [0,1,0] G P2(Z/NZ). Nechť p je nějaké (neznámé) prvočíslo dělící N. Předchozí rovnicí (kde a, b chápeme jako a + pZ, b + pZ E Z/pZ = Fp) je zadána eliptická křivka (£p,Op), přičemž Op = [0,1,0] G P2(¥p). Připomeňme, že (£p,+) je komutativní grupa a podle Hasseovy věty platí \£p\ = p + 1 — ap, kde celé číslo ap splňuje | Op | < 2-hladké pro nějaké prvočíslo p dělící N, s velkou pravděpodobností najdeme zmíněným postupem netriviálního dělitele čísla N. Problémem ale zůstává, že pro zvolené číslo B nemusí \£p\ být S-hladké pro žádné prvočíslo p dělící N, což objevíme až poté, co spočítáme LB • P- V tomto případě zvolíme jiná a, b a celý postup znovu zopakujeme. Zbývá vyjasnit několik věcí: jak volit a, b, jak najít P E £ a jak zvolit přirozené číslo B. První nápad je zvolit a, b náhodně a bod P najít jako nějaké řešení kongruence y2 = x3 + ax + b (modN), tj. pro zvolené x nalézt y. Avšak N není prvočíslo a řešit kvadratickou kongruenci modulo N je stejně obtížné jako najít netriviálního dělitele N. Proto zvolíme jiný postup: položíme b = 1, P = [0,1,1] a volíme pouze a. Jistě potom P E £. Otázkou zůstává jak volit B. Protože pro menší p je také menší \£p\, vzhledem k tomu, že menší čísla jsou s větší pravděpodobností S-hladká než velká, je metoda citlivá spíše na velikost p než na velikost N. Proto je nutno zvolit B tak velké, jak velká prvočísla jsme ještě ochotni hledat (nebo lépe, kolik času jsme ochotni hledání věnovat). Analýza pomocí odhadu pravděpodobnosti toho, že číslo jisté velikosti je S-hladké, ukazuje, že pro hledání prvočísel do velikosti v je vhodné volit B tak, aby lni? = * Aliľulnliľu. Speciálně tedy, pro hledání prvočísel menších než 1020 je vhodnou hodnotou B = 12 000 (přičemž očekáváme, že bude potřeba projít zhruba 12 000 eliptických křivek, než najdeme p). Podobně jako u Pollardovy p— 1 metody je vhodné i zde doplnit druhé stadium spočívající v tom, že předpokládáme, že \£p\ je £>i-hladký násobek prvočísla menšího než B2. Toto druhé stadium je zcela analogické jako u Pollardovy metody, proto si uvedeme algoritmus jen pro první stadium. Algoritmus (Lenstrova metoda eliptických křivek, první stadium). Nechť N je složené číslo nesoudělné s 6, B předem daná hranice. Algoritmus zkouší najít netriviálního dělitele N. Předpokládáme, že máme tabulku p[l], p[2],..., p[k] všech prvočísel menších nebo rovných B. 1. [Inicializace] Polož a <— 0. 2. [Inicializace křivky] Označme (£, O) křivku danou rovnicí y2z = x3 + axz2 + z3, kde O = [0,1,0]. Polož P = [0,1,1], i<-0. 3. [Další prvočíslo] Polož i <— i + 1. Je-li i > k, polož a <— a + 1 a jdi na 2. Jinak polož q^p[7\,qi^q,l^[^},R^P. 4. [Násob bod na křivce] Dokud q\ < l, opakuj q\ <— q ■ q\. Pak zkus spočítat P <— q\ ■ P na křivce (£,0). Pokud se to nepodařilo (tj. v průběhu výpočtu byl objeven nějaký nenulový prvek okruhu Z,/NZ,, který není invertibilní), vytiskni získaného netriviálního dělitele N a skonči. Jinak (tj. P byl vypočten), je-li P ^ O, jdi na 3. 5. [Počítej znovu] Dokud nebude R = O, opakovaně zkoušej spočítat R <— q ■ R (pokud se to nepodaří, vytiskni získaného netriviálního dělitele N a skonči). Nakonec polož a <— a + 1 a jdi na 2. 17 DALŠÍ MODERNÍ METODY HLEDÁNÍ NETRIVIÁLNÍHO DĚLITELE 40 17 Další moderní metody hledání netriviálního dělitele V současnosti se používají tři nejúčinnější metody hledání netriviálních dělitelů velkých čísel: Lenstrova metoda eliptických křivek, metoda kvadratického síta a metoda síta v číselném tělese. Všechny tři uvedené metody jsou subexponenciálmho času. Základní myšlenka kvadratického síta i síta v číselném tělese je stejná jako základní myšlenka metody řetězových zlomků, která je historicky první metodou subexponenciálního času a byla na konci 60-tých let a v 70-tých letech hlavní používanou metodou. Proto jsem i tuto metodu zařadil do našeho přehledu. Základní myšlenka. Nechť N je (velké) složené přirozené číslo, jehož netriviálního dělitele hledáme. Budeme předpokládat, že jsme ověřili, že N není dělitelné žádnými „malými" prvočísly (tj. prvočísly menšími než jistá hranice) a také, že N není mocnina prvočísla (test, jak zjistit, že n není mocnina prvočísla, byl uveden v dvanácté kapitole jako Test na mocninu; víme-li, že n není dělitelné žádným prvočíslem menším než B, pak z toho, že n = ab pro nějaká přirozená čísla a, b, b > 1, plyne a > B a tedy b < t°g2^, lze tedy v kroku 4 zmiňovaného algoritmu dokonce nahradit podmínku 2b > n ostřejší podmínkou b > t°g2^). Budeme hledat taková celá čísla x, y, aby platilo x2 = y2 (mod N) a přitom x ^ +y (mod A7"). Protože x2 — y2 = (x — y)(x + y), je jasné, že pak největší společný dělitel (x + y, N) bude netriviální dělitel čísla N. Avšak náhodné hledání takových čísel x, y je beznadějný úkol. Trik, který je společný pro všechny tři zmíněné metody, spočívá v tom, že místo toho hledáme kongruence tvaru x\ = (-l)eokpe1lkpe22k ■■■pe^k (modN), kde Pí jsou „malá" prvočísla a e^ E {0,1}. Nalezneme-li dostatečně mnoho takových kongru-encí (tj. alespoň n > m+2), můžeme Gaussovou eliminací nad F2 v m + 1-rozměrném prostoru F™+1 najít lineární závislost mezi n vektory (eofc, &\k-, • • • , emk), (ztotožňujeme {0,1} s F2), tj. najít £\,... ,£n E F2, ne všechna nulová, pro která je Yľk=i £k(^ok, eifc, • • •, emk) nulový vektor. Budeme-li nyní e\,... ,en považovat za celá čísla, pak pro každé i E {0,1,...,m} je číslo ví = I Sfc=i £k^ík celé (uvažte homomorfismus okruhů Z —► F2, jehož jádrem je množina všech sudých čísel). Položíme-li pak n r*. — II o~£fc li — ^l^2 . . . rnvm 11 fc ' ti — Pl 1J2 Pm i k=\ platí n n x2 = Hx2k£k = n((-l)e>iV22fc • • -í4mT = (-l)2>i>2*2 -Ptm = V2 (mod A0, fc=l fc=l což nám dá netriviálního dělitele čísla N, pokud x^y (modAf). V případě, že liché A^ je dělitelné právě r prvočísly, je pravděpodobnost, že nastane x = ±y (modAf) za předpokladu, že platí x2 = y2 (modAf) a (N,xy) = 1, rovna 21~r. Proto je vhodné volit n o něco větší než m + 2, abychom Gaussovou eliminací našli více závislostí. 18 NĚKTERÉ NEZBYTNOSTI O ŘETĚZOVÝCH ZLOMCÍCH 41 Množina {p\,... ,pm} se nazývá báze faktorizace. Způsob, jak ji zvolit optimálně, se u jednotlivých metod liší. Zmiňme se ještě o Gaussově eliminaci. Hledáme F2-lineární závislosti mezi řádky obrovské matice, která má však v každém řádku jen několik jedniček a zbytek tvoří nuly. Uložit celou matici do paměti by se nám patrně nepodařilo. Proto se u těchto „řídkých" matic pro každý řádek uchovávají pouze indexy jedniček v tomto řádku. Při provádění eliminace se rozlišuje mezi „řídkými" a „hustými" sloupci: hodnoty v „hustých" sloupcích se neuchovávají, místo nich se uchovává pro každý řádek informace o tom, jak byl odvozen z původní matice (tj. kterých řádků původní matice je součtem). Eliminace se provádí tak, že hledáme řádek, který má pouze jednu jedničku v „řídkých" sloupcích. Ten pak přičteme ke všem řádkům, které v tomto sloupci mají jedničku. Poté už tento řádek nebudeme potřebovat. V případě, že žádný řádek, který by měl pouze jednu jedničku v „řídkých" sloupcích, neexistuje, vybereme ten, který má jedniček co nejméně. Vybereme v něm jednu jedničku a sloupce, ve kterých jsou ostatní jedničky tohoto řádku, prohlásíme za husté. Skončíme v okamžiku, kdy už nemáme žádný řídký sloupec. Pomocí informací o odvozování řádků nyní sestavíme mnohem menší „hustou" matici, v níž se provede Gaussova eliminace obvyklým způsobem. 18 Některé nezbytnosti o řetězových zlomcích Při výkladu této kapitoly jsem užil knihu [Ca]. Definice. Pro libovolné reálné číslo a nechť (a) značí necelou část čísla a, to znamená a- (a) E Z aO < (a) < 1. Pro celou část [a] reálného čísla a tedy platí [a] = a — (a). Definice. Pro libovolné reálné číslo a nechť \\a\\ je vzdálenost a od nejbližšího celého čísla, tj. \\a\\ = min{|o! — n\; n E Z}. Definice. Nechť 9 E R, p E Z, q E N, přičemž (p, q) = 1. Racionálni číslo - se nazývá dobrá aproximace čísla 9, jestliže \\q9\\ = \q9 — p\ a pro všechna q' E N, q' < q platí \\q'9\\ > WqO\\. Věta 1. Nechť9 E R, Q E R, Q > 1. Pak existuje q E N, q < Q s vlastností \\q0\\ < ^. Důkaz. Nejprve budeme předpokládat Q E N. Uvažme Q + 1 čísel 0, 1, (9), (29), ..., {(Q — 1)9} a rozdělme je do Q intervalů [0, i), [A, 4), ..., [(T-, 1]- Z Dirichletova principu plyne, že alespoň jeden interval obsahuje aspoň dvě čísla, tedy existují ri,r2,Si,s2 E Z taková, že 0 < r\ < r2 < Q s vlastností \{r\9 — s\) — (^é1 — s2)| < -k- Položme q = r2 — r\, pak||^||<^. Jestliže Q ^ N, plyne věta z platnosti věty pro [Q] + 1. Zafixujme do konce kapitoly číslo 9 E R — Q. Ukážeme si, že z předchozí věty plyne, že existuje nekonečně mnoho q E N splňujících q-\\q9\\ 1, splňující p2 = tp', q2 = tq', pro celá čísla p', q', pak by Wq2&\\ = 192$— P2I = í|?'0—p'| > ílk'^ll > Ik'^ll) c°ž by byl spor s definicí q2. Protože2 9 ^ Q, je II^^H 7^ 0 a věta 1 s Q = ||g20||_1 zaručuje existenci g G N, které splňuje \\q9\\ < ||(?20||-Nechť q3 je nejmenší s touto vlastností a p3 G Z splňuje ||(?30|| = \q%9 — p3\. Opět (53,^3) = 1. Tímto procesem dostáváme posloupnost přirozených čísel l=qi Ikn^ll Pro všechna q E N, q < qn+\. (11) Z věty 1 pro Q = qn+\ dostaneme existenci q E N, q < qn+\, takového, že \\q9\\ < —^—. Podle (11) platí qn\\qn9\\ < qn+i\\qn9\\ < 1 (12) Kdyby čísla qn+\9 — pn+\ a qn9 — pn měla stejná znaménka, pro p' = pn+\ — pn, 0 < q' = q-n+i — qn < qn+i, bychom dostali \q'9 —p'\ < \qn9 — pn\ = \\Qn9\\, což by byl spor se (11). Proto (qn9 - Pn)(qn+i9 - pn+i) < 0. (13) Lemma 1. { —; n E N} je množina všech dobrých aproximací a platí lim — =9. ra^oo qn Důkaz. První část plyne z konstrukce, druhá z (12), neboť \9 — — \ < \. Lemma 2. qn+ipn - qnpn+\ = ±1. Důkaz. Levá strana je celé číslo a platí Qn+lPn - QnPn+l = 9n(?n+lÖ - Pn+l) ~ Qn+l^ ~ Pn), (14) odkud spolu s (12) a (13) plyne 0 < qn\\qn+i9\\ +qn+i\\qn9\\ = \qn+iPn ~ qnPn+i\ < 2gra+i||gra0|| < 2. (15) Důsledek. Číslo qn+\pn — qnpn+\ má opačné znaménko než qn9 — pn a platí Qn+lPn ~ QnPn+1 = ~\QnPn-l ~ Qn-lPn)■ 2Toto je jediné místo, kde využíváme předpoklad 9 ^ Q. V případě, že platí pouze 9 G M — Z, probíhá celý proces stejně až do okamžiku, kdy || qn, druhá část z (13) a lemmatu 2. Lemma 3. Pro libovolné n > 2 existuje an E N tak, že Qn+l = anQn + Qn-lj Pn+1 = dnPn + Pn-1, \qn-\9 — pn-i\ = an\qn9 — pn\ + \qn+i9 — pn+i\- (16) (17) (18) Důkaz. Z důsledku dostáváme pn(qn+\ — qn-\) = qn(Pn+i — Pn-i)- Protože (qn,Pn) = 1, plyne odtud existence celého čísla an s vlastností qn+\ — qn_\ = anqn, pn+\ — pn-\ = cinpn. Protože qn+i > qn-i, je an > 0. Konečně, (18) plyne z (16) a (17) díky (13). Poznámka. Z (18) dostáváme jednoduchý vzorec pro výpočet an pro každé n > 2: \Qn-i9 — Pn-l\ \qn9-Pn\ |gn-ifl|| WqJW (19) Budeme-li tedy znát p\, p2, qi, 52 a samozřejmě 9, jsme schopni pomocí (19), (16) a (17) dopočítat všechny dobré aproximace čísla 9. Následující věta zjednodušuje konstrukci těchto počátečních hodnot pi, P2, qi, 92, popisuje tedy kompletně algoritmus hledání všech dobrých aproximací reálného čísla 9: Věta. Nechť 9 G E — Z. Generujme rekurentně celá čísla pn, qn, an; nejprve položme Po = 1, Pí = [0], Qo = 0, qi = l. Pak pro každé přirozené n pokračujme takto: jestliže qn9 = pn, generování končí, jinak polo- zíme a dále \qn-i9 — Pn-i\ \qn9 -Pn\ Pn+l — anPn + Pn-lj qn+i = dnqn + qn-\. Pak všechny dobré aproximace čísla 9 jsou právě získaná čísla ^ pro n > 1, je-li cl\ > 1, resp. pro n > 2, je-li cl\ = l. Navíc platí qn {-l)n{qn9-pn) < 0, qn+iPn - qnPn+i = (-I)™- (20) (21) Důkaz. Předpokládejme nejprve, že necelá část (9) čísla 9 splňuje podmínku 0 < < Nechť pn, qn a an mají význam jako v celé této kapitole, kdežto pn, qn a an značí posloupnosti konstruované v této větě. Naším cílem je dokázat, že pro každé n E N platí pn = pn, qn = qn a pro n > 1 také an = an. Z konstrukce (8), (9), (10) a (11) víme, že q\ = 1, p\ = [9], \\9\\ = (9). 18 NĚKTERÉ NEZBYTNOSTI O ŘETĚZOVÝCH ZLOMCÍCH 44 Zřejmě pro každé Z G N, 1 < Z < ^y, platí platí = 1(9), kdežto pro každé Z G N, ^W < Z < 4y. Z(0). Hledáme nejmenší přirozené číslo Z splňující ||Z0|| < (0). Přitom 1-Z(0><(0>, právě když Z + l > Pro Z G Z je Z + 1 > (0) l ekvivalentní s Z + 1 > [(9) 1], nejmenším takovým Z je právě Z = [(0)-1]. Je třeba ověřit, že pro toto Z platí nerovnost ^y < Z < 4y, tedy že platí Definice celé části dává < 1 < [(9)-1} < (9)-1. (22) _1 < [(^)_1] + 1) a tedy pravá nerovnost (22) platí. Dostáváme 1 < (9)[(9)-1] + (9), a tedy (9)[(9)-1] > 1 - (9), což vzhledem k předpokladu (0) < | dává (0)[(0)-1] > §, což je levá nerovnost (22). Odvodili jsme, že q2 = [(0)"1] > 2. Zbývá dopočítat p2. Víme, že 1192011 = 1 - 92(0) = -(Q2O-P2) = -<72«0> + [0]) +P2 = -92(0) + ("92[0] + P2), porovnáním p2 = 92 [0] + 1- Dodefinujeme po = 1, 9o = 0, ai = 92. Ověřme, že s takto dodefinovanými hodnotami zůstávají v platnosti vztahy (16), (17) a (19) i pro n = 1: «i9i + 9o = «i = 92, «lPl +Po = «i[0] + 1 = P2, ~|9o0-Poľ _\Qi9-'Pi\_ = 1 [ö-[ö]J 92 (Zl- Protože posloupnosti pra, qn, an ap„, 9„, ara mají stejné počáteční podmínky a stejné rekurentní vztahy, jsou stejné. Proto všechny dobré aproximace čísla 0 jsou právě ^ pro n > 1. Zřejmě 9o0 — Po = — 1 < 0, 9i0 — Pi = (0) > 0, 9iPo — 9oPi = 1 a lemma 2 s důsledkem dává (20) a (21). Věta je za předpokladu 0 < (0) < \ dokázána. Předpokládejme nyní, že naopak platí (0) > \ (případ (0) = 0 je vyloučen podmínkou Í Z). Pak ovšem 0 < < 2' a tedy věta již byla dokázána pro —0. Nechť opět pra, qn a an mají význam jako v celé této kapitole (pro 0) 9j prii Qn ct Qjfi ZllctCl posloupnosti konstruované pro 0 v této větě. Nechť dále pn, qn a an značí posloupnosti ze znění věty pro —0 (díky tomu, že pro —0 již byla věta dokázána, jsou to také posloupnosti z textu kapitoly pro —0). Zřejmě - je dobrá aproximace čísla 0, právě když — je dobrá aproximace čísla —0. Proto platí Pr, -Pn, 9n = 9n pro n > 1 a dn = dn pro n > 2. (23) Z konstrukce popsané ve větě plyne p0 = 1, 90 = 0, pí = [0], 91 = 1, (Zl \qo9-po\ neboť 1 < \QiV-Pi\ ~l < 2, dále p2 = pí +po = [0] + 1, 92 = 9i + 9o = 1, a2 \qi9 -Pi\ |920-p2| (9) (9) 18 NĚKTERÉ NEZBYTNOSTI O ŘETĚZOVÝCH ZLOMCÍCH 45 Podobně z této konstrukce pro — 9 plyne po = 1, Qo = 0, p\ = [—9] = — 1 — [9] = —p2, qi = l = q2, ci\ \Qo(- ■Po\ \qi(-9) -V\ 9 + l + [9]\ l-(9) a2 + 1. Dále P2 = aipi +Po = (a2 + l)(-p2) + 1 = -a2p2 - [9] = -(ä2p\ + pi) = -p3, q~2 = hqi + q0 = a2 + 1 = a292 + ?i = ?3, odkud plyne pra = —p„+i & qn = qn+\ pro všechna n > 1 a an = än+\ pro všechna n > 2. Dohromady s (23) dostáváme Pn = Pn+i, qn = qn+\ pro n > 1 a an = ara+i pro n > 2. (24) Proto všechny dobré aproximace čísla 9 jsou právě ^ pro n > 2. Zřejmě go^ — Po = — 1 < 0, qiO-pi = {9} > 0, q29-p2 = {9} - 1 < 0, (/ip0 - qoPi = 1, fepi - ftP2 = [0] - ([0] + 1) = -1, a lemma 2 s důsledkem dává (20) a (21) i v tomto případě. Věta je dokázána. Poznámka. Vysvětleme si, odkud se vzal termín „řetězové zlomky". Předpokládejme, že flel-Za definujme celá čísla pn, qn pro n > 0 a an pro n > 1 jako v předchozí větě. Pro každé n > 1 ještě označme a \qn9-pn\ Un = i--------a-------------r \qn-iV — pn-i\ Rekurentní vztahy z věty zaručují, že pro každé n > 1 platí \qn-i9 —pn-i\ = an\qn9 — pn\ + \qn+i9 — pn+i\, a tedy 9~l = an + 9n+\, odkud což spolu s 9\ = (9) dává 9 = [9]+91 = [0]+-^— ci\ + "2 [0}+ Cl\ 1 an + 9n+1 = [*] + (12+03 ßl [Ö]+ «2- ßl »3+e «2- Příklad. Nalezněme několik dobrých aproximací čísla v 23. Budeme užívat označení z věty. Je tedy p0 = 1, qo = 0, p\ = [-\/23] = 4, qi = 1 a platí 7 -4 23- 16 7(^ + 3) 2 -3 23-9 2(^ + 3) 7 -3 23-9 7(^ + 4) VŽ3 + 4: VŽŠ-3 + 7 ' 3 + ^*. ai = 1, CI2 = 3, 1 , ^-4 1 1 +-----------, a3 = l, v/23-4 23-16 !^±Ö = 8+(^3_4), a4^8. 18 NĚKTERÉ NEZBYTNOSTI O ŘETĚZOVÝCH ZLOMCÍCH 46 Vidíme, že pátý řádek by byl stejný jako první, proto posloupnost an je periodická s periodou 1, 3, 1, 8. (Je možné dokázat, že periodickou posloupnost an mají právě kvadratické iracionality, tedy iracionální čísla, která jsou kořeny kvadratických polynomů s racionálními koeficienty, to však v tomto textu dokazovat nebudeme.) Výpočet čísel pn, qn je výhodné uspořádat do tabulky: n 0 1 2 3 4 5 6 7 8 9 10 11 12 13 Pn 1 4 5 19 24 211 235 916 1151 10124 11275 43949 55224 485741 Qn 0 1 1 4 5 44 49 191 240 2111 2351 9164 11515 101284 Cln 1 3 1 8 1 3 1 8 1 3 1 8 Protože a\ = 1, dostáváme dobré aproximace čísla v 23 až pro n > 2, jsou to čísla 19 24 211 235 916 1151 10124 11275 43949 55224 485741 5, -r, -, 44' 49' 191' 240' 2111' 2351' 9164' 11515' 101284' Tuto kapitolu zakončíme slíbeným důkazem Lehmannovy věty z kapitoly 13 (str. 33). Důkaz Lehmannovy věty. Dokazujme nejprve existenci celých čísel x, y, k splňujících podmínky (1), (2) a (3) Lehmannovy věty. Je-li p = q, věta platí pro x = 2p, y = 0, k = 1, neboť N = p2 = 1 (mod 4), a tedy k + N = 2 = 2p (mod 4). Nechť dále p < q. Sestrojme posloupnost dobrých aproximací — čísla 9 = - a zvolme n tak, aby pnqn < \/Ň < pn+iqn+i- To lze, protože algoritmus výpočtu dobrých aproximací se zastaví až pro pn = q, qn = p, kdy je přesně dosaženo 9. Protože 9 > 1, jsou čísla pn, pra+i, qn, qn+\ kladná. Položme "" PnQn x = ppn + qqn y = ppn- qqn- Zřejmě x2 — y2 = ^ppnqqn = 4kN, odkud plyne podmínka (1). Jestliže 2\k, pak je právě jedno z čísel pn a qn sudé (vždyť jsou nesoudělná), a protože p a q jsou lichá, je x liché. Je-li naopak k liché, jsou pn a qn lichá, odkud qnpx = qnp2Pn + qq2nP = qnpn + qp = k + N (mod 4) a ze sudosti x plyne qnpx = x (mod 4), celkem tedy dostáváme podmínku (2). Z teorie dobrých aproximací (viz (12)) plyne \qn9-Pn\ = \\qn9\\ < q-n+i odkud vydělením qn dostaneme a tedy Podobně opět z (12) y\ = \PPn Pn _q qn P qqn\ = < qnqn+i Pn _q qn P ■pqn < p qn+i Pn+i q qn+i p < 2 ' q-n+i 18 NĚKTERÉ NEZBYTNOSTI O ŘETĚZOVÝCH ZLOMCÍCH 47 odkud jinými slovy Pn+l Qn+l q p Pn+l 1 Pn+i q Qn+l P Qn+l ___1_ Q qqn+i Qn+l Pn+l P Q qqn+i 1 qqn+i Vynásobením levé nerovnosti číslem ^^ dostaneme qn+l Pn+iqn+l 1 pq Pn+lQn+1 p* pq pq N Ovšem Pn+iqn+i > \^Ň > [\/iV], tedy pn+iqn+i — 1 > [v7^]- Dohromady x AkN = y2 < rp N < - qn+l Pn+iq-n+1 < N N] a platí i podmínka (3). Předpokládejme nyní, že pro liché přirozené číslo N máme dána nějaká celá čísla x, y, k splňující podmínky (1), (2) a (3), tedy tato čísla nyní nemusí nutně pocházet z výše uvedené konstrukce pomocí dobrých aproximací. Snadná probírka všech možností pro lichá N v intervalu 3 < N < 15 ukáže, že pouze pro N = 9 a N = 15 existují celá čísla x, y, k splňující podmínky (1), (2) a (3), a to pro N = 9 jen trojice k = 1, x = 6, y = 0, kdy skutečně (x ± y, N) = 3, a pro N = 15 pouze dvě trojice, a to k = 1, x = 8, y = 2 a k = 2, x = 11, y=lav obou případech {(x + y, N), (x — y, N)} = {3,5}. Předpokládejme tedy dále, že liché N > 17. Pak [\^Ň] > 2 a z podmínek (1) a (3) plyne \y\ < a tedy Proto , podobně z (3) a (1) dostaneme AN < AkN < x2 < {Ak + \)N < (4\/ÍV + ±)N, 2VŇ 17 platí JA\^Ň + \ + ^ < v^, odkud dostáváme 1 < x ± y < N. Proto platí (x + y, N) < N a (x — y, N) < N. Přitom z podmínky (1) plyne N \ x2 — y2, a tedy N = (x2 - y2, N)\(x + y, N) ■ (x - y, N). V případě prvočíselného N jsme dostali spor a v případě, kdy N je součinem dvou prvočísel p a q, je jasné, že jeden z výše uvedených největších společných dělitelů je roven p a druhý q. Lehmannova věta je dokázána. 19 METODA ŘETĚZOVÝCH ZLOMKŮ 48 19 Metoda řetězových zlomků Jak už bylo zmíněno v sedmnácté kapitole, budeme hledat kongruence tvaru x\ = (-l)eokpe1lkpe22k ■■■pe^k (modN), kde Pí jsou pevně zvolená prvočísla a e^ G {0,1}. Budeme vycházet z toho, že pokud zvolíme do naší báze faktorizace všechna prvočísla p\,... ,pm menší než nějaká hranice a najdeme-li kongruenci x2 = t (mod N) s „malým" \t|, je reálná šance, že v rozkladu čísla |ŕ| se nevyskytují jiná prvočísla než pi,... ,pm a tedy že získáme kongruenci požadovaného tvaru. Předpokládejme, že jsme pomocí řetězových zlomků našli dobrou aproximaci - čísla vkN, kde k je nějaké nepříliš velké přirozené číslo nedělitelné druhou mocninou prvočísla. Označme t = p2 — kNq2. Pak p2 = t (mod N). Nalezněme odhad pro |í|. Podle (9), (12) a lemmatu 1 předchozí kapitoly platí W-p- Q 1 < Q2' tedy 1 nr—+ ! — < y P — t — p < -. q q Přičtením p, umocněním a odečtením p2 dostaneme 2p 1 2p 1 —- + -^ < -t< — + —, q qz q qz odkud vzhledem k ykN > - —\ plyne t < — + — <2VkN + —. q ql ql Číslo |í| tedy opravdu není „velké" a šance na získání užitečné kongruence hledaného tvaru je- Metoda řetězových zlomků tedy dává následující algoritmus: postupně za k volíme přirozená čísla nedělitelná druhou mocninou prvočísla a pro každé takové k počítáme jistý počet dobrých aproximací -. Pro každou dobrou aproximaci zkoušíme rozložit číslo |í| = \p2 — kNq2\ pomocí prvočísel z báze faktorizace. Jestliže se to podaří, získáme kongruenci požadovaného tvaru. Pokud |í| není možné rozložit pomocí prvočísel z báze faktorizace, avšak platí \t\ = F ■ U, kde F se pomocí prvočísel z báze faktorizace rozkládá a U je (asi) prvočíslo podle testu Millera a Rabina, je vhodné uložit i trojici (p, t, U). Získáme-li totiž později ještě jinou trojici (p',ť, U), pak z p2 = t (modN) a (p')2 = ť (modN) získáme kongruenci x2 = jp_ (modN), kde x je řešení kongruence U x = pp' (mod N). 20 Metoda kvadratického sita Opět budeme hledat kongruence tvaru x\ = (-l)eokpe1lkpe22k ■■■pe^k (modN), 20 METODA KVADRATICKÉHO SITA 49 kde pi jsou pevně zvolená prvočísla a e^ E {0,1}. Rozdíl oproti metodě řetězových zlomků je ve způsobu, jakým jsou tyto kongruence hledány. Označme d = [vN] a uvažme kvadratický polynom Q{x) = {x + d)2 - N. Je jasné, že Q (a) = (a + d)2 (mod N) a že |Q(a)| nebude „velké" pro celá čísla a s „malou" absolutní hodnotou. Ačkoli je to jednodušší metoda generování „malých" kvadrátů modulo N než metoda řetězových zlomků, zatím není příliš zajímavá. Rozhodující důvod, proč je tato metoda rychlejší než metoda řetězových zlomků, je tento: není nutné rozkládat „malé" kvadráty modulo N. Vzhledem k tomu, že většinu z nich rozložit nad zvolenou bází faktorizace nelze, znamená toto marné rozkládání plýtvání časem. Jak tedy budeme postupovat: předpokládejme, že pro nějaké n E N víme, že n \ Q (a). Pak ovšem pro každé k E Z platí n \ Q (a + kn). Hledat takové a znamená řešit kongruenci x2 = N (mod n) a vzít a = x — d. Přitom řešení této kongruence pro malé n není tak obtížné (je-li dokonce n prvočíslo, lze použít Shanksův algoritmus, který je časové náročnosti 0(ln4n)). Jak budeme čísla prosívat: na velmi dlouhém intervalu pro všechna celá čísla a spočítáme velmi zhruba ln|Q(a)| (ukážeme si, že stačí s chybou menší než 1, proto určitě nepoužijeme algoritmus pro logaritmus, ale nějaký jiný postup, například uvažujeme logaritmy o základu 2 a počítáme řád první jedničky binárního zápisu). Tyto hodnoty uložíme do vektoru indexovaného a. Pak pro všechny mocniny prvočísel pk menší nebo rovny jisté hranici B, odečteme přibližnou hodnotu log2p od všech prvků v našem vektoru, jejichž index a je kongruentní modulo pk s předem vypočteným řešením kongruence Q (a) = 0 (modpfc), tj. (a + d)2 = N (modpfc) (protože předpokládáme, že p \ N, má pro lichá p tato kongruence dvě řešení, je-li N kvadratický zbytek modulo p, a žádné, jestliže je N kvadratický nezbytek modulo p - do báze faktorizace tedy dáváme jen ta prvočísla, pro něž je N kvadratický zbytek). Po ukončení prosívání zjistíme, pro která a není Q (a) dělitelné mocninou prvočísla větší než B. Pro tato a je totiž prvek ve vektoru indexovaný a malý (kdyby logaritmy byly přesné, byla by to nula). V opačném případě zde musí být číslo větší než log2 B (odhlédneme-li od nepřesnosti logaritmů). Odhadněme potřebnou přesnost e výpočtu log2p. Označme k = [maxalog2 |Q(a)|], pak každé číslo |Q(a)| má nejvýše k činitelů. Je-li Q (a) rozložitelné pomocí naší báze faktorizace, je po provedení odčítání logaritmů ve vektoru s indexem a číslo menší než 1 + ke. Naproti tomu pro nerozložitelné Q (a) dostaneme číslo větší než (log2 B) — 1 — (k — log2B)e. Pro e < ~fc^)°g2ď je tedy druhé číslo větší než první. Místo k sem přitom můžeme dosadit číslo o jedna větší než bylo největší číslo ve vektoru před započetím prosívání. Pak pro všechna a, pro které je Q (a) rozložitelné, spočítáme znovu Q (a) a rozložíme, čímž získáme kongruenci požadovaného tvaru. Máme-li dost místa v paměti, můžeme také ukládat v průběhu prosívání pro každou položku a prvočísla, jejichž logaritmy jsme odčítali (nebo alespoň několik největších z nich), což nám urychlí rozkládání. Podobně jako u metody řetězových zlomků i v tomto případě můžeme hledat kongruence x2 = F ■ U (modN), kde F se pomocí prvočísel z báze faktorizace rozkládá a U je „nepříliš velké" číslo. V tom případě rozkládáme Q (a) pro všechna a, pro které po prosívání zůstalo ve vektoru číslo menší než nějaká předem daná mez a nerozložitelný faktor spolu s a uchováváme pro případ, že by se týž faktor objevil ještě jednou. 21 METODA KVADRATICKÉHO SITA S VICE POLYNOMY 50 Nevýhodou je, že na dlouhém intervalu prosívání hodnoty polynomu Q (x) značně rostou a s tím i klesají naše šance na úspěšné rozložení. Mohli bychom proto vzít ještě další polynom a prosívat i jeho hodnoty, například Q(x) = (x + [VIŇ])2 — IN pro nějaké přirozené číslo / nedělitelné druhou mocninou prvočísla. V tom případě bychom však museli doplnit naši bázi faktorizace: připomeňme, že v ní máme pouze ta prvočísla p, pro která je N kvadratický zbytek modulo p, kdežto nyní potřebujeme ta, pro která je IN kvadratický zbytek modulo p. Ovšem zvětšení báze faktorizace znamená potřebu více kongruencí a provádění Gaussovy eliminace větší matice. 21 Metoda kvadratického síta s více polynomy Uvažujme obecný kvadratický polynom Q(x) = Ax2 + 2Bx + C takový, že A,B,C E Z a A > 0. Platí AQ(x) = (Ax + B)2 - (B2 - AC). Pokud bude splněno N \ B2 — AC, pro každé a E Z dostaneme kongruenci tvaru AQ(a) = (Aa + B)2 (modiV). Zvolme délku 2M intervalu, na kterém budeme prosívat a pokusme se optimálně zvolit konstanty A,B,C. Abychom měli šanci na rozložení čísla |Q(a)| nad naší bází faktorizace, je vhodné, aby maximum funkce |Q(x)| na intervalu prosívání bylo co možná nejmenší, proto interval zvolíme tak, aby minimum funkce Q(x) padlo doprostřed, tj. prosívat budeme na intervalu /= (—^ — M, — ^ + M). Dále budeme požadovat, aby Q(-f + M) = -Q(-f), tj. A2M2 = 2(B2 - AC), odkud plyne ^ V2(ffl - AC) A- M ' Je tedy ,^, m ,^/ 5m B2 - AC „B2-AC max|Q(,)| = |Q(--)| = —— = M^— Protože toto číslo potřebujeme mít co nejmenší, ale současně má být B2 — AC dělitelné číslem N, je vhodné volit A, B, C tak, aby B2 — AC = N, kdy maximum |Q(x)| na / bude zhruba Budeme tedy postupovat tak, že nejdříve zvolíme délku prosívání M. Pak budeme koeficienty jednotlivých polynomů Q(x) generovat takto: zvolíme A blízko ^f-, navíc tak, že A je prvočíslo a N je kvadratický zbytek modulo A. Pak nalezneme B tak, že B2 = N (mod A) a konečně položíme C = B ~[N■ Pak pokračujeme stejně jako v metodě kvadratického síta -pro každou mocninu pk prvočísla p menší než nějaká předem daná hranice určíme kořen apk kongruence x2 = N (modpfc), má-li tato kongruence řešení (pro lichá p to znamená, že N je kvadratický zbytek modulo p), ostatní prvočísla ignorujeme. To spočítáme pro všechny polynomy jednou a uschováme. Pak totiž kořeny polynomu Q(x) modulo pk vyhovují kongruenci Ax = —B±a,pk (modpfc). Postupně prosíváme hodnoty jednoho polynomu Q(x) po druhém dokud nezískáme dostatek kongruencí pro Gaussovu eliminaci. Protože malá prvočísla dělí hodně hodnot Q(x), trvá prosívání malými prvočísly nejdéle, přičemž jejich logaritmus je malý. Proto se v některých implementacích prosívání malými prvočísly (řekněme menšími než 100) vynechává, jen je nutné zvýšit hranici, používanou po skončení prosívání pro rozhodování, zda dotyčnou hodnotu polynomu Q(x) budeme rozkládat 22 ZÁKLADY ALGEBRAICKÉ TEORIE ČÍSEL 51 nebo ne. Přitom strategie je taková: raději zkusit rozkládat nerozložitelné Q(x) než ztratit některé rozložitelné a tedy nějakou užitečnou kongruenci. Vzhledem k tomu, že získané kongruence je snadné kontrolovat, je možné do generování kongruenci zapojit více lidí tak, že pomocí e-mailu je jim distribuován program s daty, který nechají běžet ve volném čase na svém počítači, a získané výsledky opět vracejí e-mailem. Tato metoda byla s úspěchem použita při rozkládání devátého Fermatova čísla N = 22 +1 pomocí metody síta v číselném tělese v roce 1990. A. K. Lenstra, H. W. Lenstra, M. S. Manasse a J. M. Pollard tímto způsobem získali matici o 226 688 řádcích a 199 203 sloupcích. Po „zahuštění" této matice (viz poznámku na konci sedmnácté kapitoly) získali matici o 72 413 řádcích a 72 213 sloupcích. Gaussovou eliminací této matice pak získali kongruenci, která jim určila netriviálního dělitele čísla N. 22 Základy algebraické teorie čísel Definice. Jsou-li K, L tělesa a je-li KCL, řekneme, že L je rozšířením tělesa K. Je-li navíc L jakožto vektorový prostor nad K koneěněrozměrné, hovoříme o konečném rozšíření. Dimenzi L nad K značíme [L : K]. Definice. Podtěleso komplexních čísel, které je konečným rozšířením Q, se nazývá těleso algebraických čísel. Definice. Nechť K je těleso algebraických čísel, a E K. Pokud existuje normovaný polynom f(x) E Z[x], jehož je a kořenem, nazývá se a celé algebraické číslo. Poznámka. V předchozí definici je podstatný požadavek normovanosti. Je-li totiž [K : Q] = n, pak 1, a, a2,... ,an musí být Q-lineárně závislé, a tedy existuje polynom f(x) E Z[x] stupně nejvýše n tak, že f (a) = 0. Lemma 1. Nechť K je těleso algebraických čísel, u\,... ,un E K. Nechť M je aditivní grupa, generovaná ui,..., ujn, tj. M = {aiUJi + • • • + anujn; a^,..., an E Z}. Je-li M okruh, pak je libovolný prvek M celé algebraické číslo. Důkaz. Bez újmy na obecnosti můžeme předpokládat, že ui... ujn ^ 0. Buď a E M libovolné. Protože pro každé i = 1,..., n platí aují E M, existují celá čísla a^ splňující n auji = 2^ ttij^j 3 = 1 pro každé i = 1,..., n. Odtud plyne, že det(cü£' — (<%)) = 0, kde E je jednotková matice řádu n. Proto je a kořenem normovaného polynomu f(x) = det(xE — («ý)) E Z[x]. Věta 1. Nechť K je těleso algebraických čísel. Označme R množinu všech celých algebraických čísel a E K. Pak R je obor integrity a K je jeho podílové těleso. Důkaz. Abychom ověřili, že i? je obor integrity, musíme dokázat, že pro libovolná a, ß E R jsou a + ß, a — ß i aß celá algebraická čísla. Protože a a ß jsou celá algebraická čísla, existují polynomy s celými koeficienty f(x) = xn + an_ixa~l + • • • + a\x + a0, g(x) = xm + bm_\Xm~x + • • • + b\X + 60 22 ZÁKLADY ALGEBRAICKÉ TEORIE ČÍSEL 52 tak, že f (a) = O a g(ß) = 0. Pak ovšem platí or = -an-iotn~l----------axa - a0, ßm = -bm-ißm~l----------biß -b0, a tedy podgrupa M aditivní grupy tělesa K generovaná všemi součiny ďfí, kde 0 < i < n, 0 < j < m, (25) tvoří okruh, neboť libovolný součin akßl pro k > 0, / > 0 je možné vyjádřit jako Z-lineární kombinaci prvků (25). Podle lemmatu 1 jsou a + ß, a — ß, aß E M celá algebraická čísla. Zbývá dokázat, že K je podílové těleso okruhu R. Nechť a E K je libovolné. Podle poznámky před lemmatem 1 existuje polynom f (x) = dkXk + dk-\Xk~l + • • • + a\X + a0 E Z[x] tak, že f (a) = 0 a a^ 0. Pak ovšem číslo ß = aka je kořenem polynomu xk + ak-\xk~l -\--------h aiakk~2x + aoakk~l E Z[x], a proto číslo ß je celé algebraické. Je tedy a = £- podílem dvou čísel z R. Dokázali jsme, že K je podílové těleso okruhu R. Příklad. Označme K = Q(v/ÍO) = {a + bVlÖ- a, b E Q}. Snadno se ukáže, že K je těleso algebraických čísel a že [K : Q] = 2. Označme R okruh všech celých algebraických čísel v K. Je-li a, b E Z, pak a = a + b^/IÔ je kořenem polynomu (x - a - bVlÔ)(x -a + bVlÔ) = x2 - 2a + (a2 - 10b2), a tedy a + b^/lÖ E R. Předpokládejme naopak, že pro nějaké a, b E Q, platí a = a + b^/lÔ E R a dokažme, že a, b E Z. Je tedy a kořenem nějakého normovaného polynomu f (x) E Z,[x]. Je-li b = 0, je a E Q a podle věty 8.5 na straně 100 skript [R] platí a E Z. Nechť tedy 6^0, tj. a ^ Q. Vydělme polynom f (x) polynomem g(x) = x2 — 2a + (a2 — 1062) se zbytkem: existují tedy polynomy q(x), r (x) tak, že f (x) = q(x)g(x) + r (x) a přitom je r (x) buď nulový nebo stupně nejvýše jedna. Dosazením a za x dostaneme r(a) = 0, odkud vzhledem k a ^ Q plyne, že r (x) je nulový polynom. Připomeňme (viz [R], důkaz věty 8.7 na straně 100), že polynom s celočíselnými koeficienty takový, že největší společný dělitel jeho koeficientů je roven 1, se nazývá primitivní. Platí (viz tamtéž), že součin primitivních polynomů je opět primitivní polynom. Nechť u a v jsou racionální čísla taková, že polynomy uq(x) a vg(x) jsou primitivní (tím jsou čísla u a v určena jednoznačně až na znaménko). Pak je tedy primitivní i polynom uvf(x) = uq(x) ■ vg(x). Ovšem polynom f(x) je normovaný s celými koeficienty a tedy primitivní. Je proto uv = ±1. Protože polynom g(x) je normovaný, je normovaný i q(x) a tedy z definice u a v plyne, že u, v E Z. Proto v = ±1 a tedy g(x) má celočíselné koeficienty: c = 2a E Z, a2 - 10b2 E Z. Proto 4062 = c2 - 4(a2 - 1062) E Z, odkud d = 2b E Z. Pak ovšem 4 | 4(a2 — 1062) = c2 — 10d2 a tedy c2 je sudé číslo. Je tedy sudé i samo c a proto je sudé i d2 a tedy i d. Dokázali jsme, že a, b E Z, tj. R = {a + bVÍO; a, b E Z}. Poznámka. Zajímá nás, nakolik je aritmetika v okruhu R podobná aritmetice v Z. Aritmetika v Z je poměrně jednoduchá díky větě o jednoznačném rozkladu na součin prvočísel: každé nenulové celé číslo je možno zapsat ve tvaru součinu vhodné jednotky (tj. invertibilního 22 ZÁKLADY ALGEBRAICKÉ TEORIE ČÍSEL 53 prvku, v tomto případě 1 nebo —1) a konečně mnoha ireducibilních prvků (tj. prvočísel), přičemž je tento rozklad jednoznačný až na pořadí činitelů. Příklad. Ukažme si, že aritmetika R může být i odlišná: nechť K a. R jsou jako v předchozím příkladě a definujme zobrazení (tzv. normu) M : R —► Z předpisem N {a + bVlÖ) = {a + bVlÖ){a - bVlÖ) = a2 - 10b2. Snadno se nahlédne, že N {aß) = Af{a)Af{ß) pro každé a, ß E R. Dokažme, že množina všech jednotek okruhu i? je rovna E = {aeR] Aí{a) = ±1}. Skutečně, je-li a jednotka okruhu R, existuje ß E R tak, že aß = 1, odkud plyne 1 = N {aß) = Af{a)Af{ß), a tedy ÁÍ{a) = ±1. Opačná implikace je zřejmá. V okruhu R můžeme rozložit 9 = 3 • 3 = -(1 + v/10)(l - VTÖ). Přitom jV(3) = 9 a J\f{l + VlÖ) = —9. Dokážeme-li, že v R neexistují čísla s normou ±3, budeme vědět, že všechna čtyři čísla uvedená v rozkladu čísla 9 jsou ireducibilní, tj. není možné je zapsat ve tvaru součinu dvou čísel z R, které nejsou jednotkami. To je ale snadné: z a2 —10b2 = ±3 plyne a2 = ±3 (mod 5), spor. V R tedy neplatí věta o jednoznačném rozkladu čísel na součin ireducibilních faktorů. Je zřejmé, že 3 + VlÖ je jednotka okruhu R a proto i všechny její mocniny. Odtud plyne, že E je nekonečná. Dokažme, že platí E = {±{3 + VlÖ)n; n E Z}. Budeme předpokládat existenci nějaké jednotky rj okruhu R, pro kterou platí rj ^ E a dojdeme ke sporu. Můžeme předpokládat, že r\ > 0 (jinak vezmeme —tj), dokonce že rj > 1 (jinak vezmeme -). Navíc můžeme předpokládat rj < 3 + VlÖ (jinak vydělíme rj největší mocninou čísla 3 + VlÖ menší než rj). Je tedy rq = a + bVlÖ pro nějaké a, b E Z a platí 1 < a + bVlÖ < 3 + VlÖ, M {a + bVlÖ) = {a + bVÍO){a - by/ÍO) = ±1. Tudíž a - bVlÖ = ^, a proto — 1 < a — Ď-s/lO < 1. Sečtením odtud plyne 0 < 2a < 4 + VlÖ, což vzhledem k tomu, že a je celé číslo, znamená a E {1, 2,3}. Protože b je rovněž celé číslo a platí b2 = -^{a2 =F 1), dostali jsme, že rq = 1 nebo rq = 3 ± VlÖ, spor. Poznámka. Kummer v polovině minulého století objevil způsob, jak jednoznačné rozkládání zachránit. Jak jsme viděli, věta o jednoznačném rozkladu prvků v okruzích celých algebraických čísel neplatí, platí zde ale věta o jednoznačném rozkladu ideálů. Každý nenulový ideál okruhu celých algebraických čísel je možné psát ve tvaru součinu prvoideálů a to jednoznačně až na pořadí činitelů. Připomeňme některé použité pojmy: nulový ideál je ideál {0}, prvoideál je ideál / okruhu R, pro který platí: / ^ R a pro každé a, ß E R z aß E I plyne a E I nebo ß E I (ekvivalentně: ideál / je prvoideál, právě když je faktorokruh R/I oborem integrity, viz [R], definice 10.8 a věta 10.9, str. 108). Je ještě třeba definovat, co je to součin ideálů: jsou-li /, J ideály okruhu R, jejich součinem je ideál n IJ = < 2_, aißi'i n EN, ai E I, ßi E J pro všechna i = 1,..., n >. í=i 22 ZÁKLADY ALGEBRAICKÉ TEORIE ČÍSEL 54 Věta 2. Nechť R je okruh celých algebraických čísel v nějakém tělese algebraických čísel K. Nechť I je ideál R, I ^ R, I ^ {0}. Pak existuje jednoznačně určené n G N a jednoznačně (až na pořadí) určené prvoideály P\, ..., Pn takové, že platí I = Pi...Pn. Důkaz je mimo možnosti naší přednášky. Poznámka. Jak lze větu použít na rozkládání nenulového prvku a E R, který není jednotka? Rozložíme hlavní ideál (a) = {aß; ß G R}. (Užíváme následujícího označení: (a\,..., an) je ideál generovaný čísly a\,..., an, tj. nejmenší ideál, který je obsahuje.) Pokud je R okruh hlavních ideálů (tj. každý ideál okruhu R je tvaru (a) pro vhodné a E R), dostaneme podle výše uvedené věty ireducibilní prvky m,... iľn G R tak, že (a) = (7Ti) . . . {-Kn) = (7Ti . . . 7Tra), odkud plyne, že a = e ■ tt\ ... iľn pro vhodnou jednotku e. Odvodili jsme tedy, že je-li okruh celých algebraických čísel R okruhem hlavních ideálů, platí v něm věta o jednoznačném rozkladu na prvočinitele (což je fakt platný obecně pro libovolný okruh hlavních ideálů). Příklad. Vraťme se k našemu předchozímu příkladu: označme /, resp. J ideály generované 3 a 1 + -\/TÖ, resp. 3 a 1 — VlÖ, tj. / = (3,1 + VTÖ) = {3a + (1 + VlÖ)ß] a,ßeR}, J = (3,1 - VTÖ) = {3a + (1 - V^Ö)^; a,ß G R}. Pak /, J jsou prvoideály (platí R/1 ~ R/J ~ F3) a platí IJ = (3) (snadno je vidět, že IJ C (3), opačná inkluze plyne z 3 = 3-3 — 3(1 — VlÖ) — (1 + -\/TÖ)3). Dále platí I2 = (9, 3(1 + VlÖ), (1 + v^)2) = (9,3 + 3^, 11 + 2^), proto 1 + v^ = 9 + (3 + 3-s/lO) - (H + 2-y/ÍO) G I2. Na druhou stranu jistě 9, 3(1 + V^Ö) a (1 + v^)2 jsou prvky ideálu (1 + v^), tedy ľ = (1 + V^Ö). Analogicky J2 = (1 - V^Ö). Obě strany identity (1 + V/1Ö)(1-V^) = -3-3 udávají tedy týž rozklad ideálu (9) na prvoideály: (9) = I2 J2. Poznámka. Míru toho, nakolik se okruh celých algebraických čísel R nějakého tělesa algebraických čísel K liší od okruhu s jednoznačným rozkladem prvků, nám vlastně udává to, kolik ze všech ideálů okruhu R je hlavních. Uvažme pologrupu všech nenulových ideálů okruhu R a jeho podpologrupu všech hlavních ideálů. Můžeme uvážit faktorizaci této pologrupy podle zmíněné podpologrupy (což odpovídá následující ekvivalenci mezi ideály: / ~ J, právě když existují nenulová a, ß E R splňující (a) ■ I = (ß) -J). Je možné dokázat, že faktorstrukturou je konečná komutativní grupa. Počet jejích prvků se nazývá počet tříd ideálů okruhu R (nebo také tělesa K) a je jednou z nejdůležitějších charakteristik aritmetiky v okruhu R. Poznámka. V našem příkladě jsme odvodili, že grupa jednotek okruhu celých algebraických čísel tělesa Q(i/Í0) je E = {±(3 + VlÖ)n; n E Z}, 23 METODA SÍTA V ČÍSELNÉM TĚLESE 55 tedy komutativní grupa se dvěma generátory — 1 a 3 + \/lÖ. Tento fakt platí obecně: grupa jednotek okruhu celých algebraických čísel libovolného tělesa algebraických čísel je konečně generovaná komutativní grupa a pro minimální počet jejích generátorů platí, že nepřevýší stupeň [K : Q]. 23 Metoda síta v číselném tělese Vraťme se k našemu původnímu problému: máme velké přirozené číslo N, o kterém víme, že je složené, a hledáme jeho netriviálního dělitele. Zvolme celé algebraické číslo 9 a označme T(x) E Z[x] normovaný mnohočlen nejmenšího stupně, jehož je 9 kořenem. Nechť K = Q(9) je nejmenší těleso algebraických čísel, které obsahuje číslo 9. Označme L = {a0 + ax9 H--------Y ad-i9d~l\ a0,..., ad-i E Q}, kde d je stupeň polynomu T (x). Dokážeme, že platí K = L. Protože T{9) = 0, je jasné, že L je okruh. Dokažme, že je L dokonce těleso, pak bude zřejmé, že je L nejmenší těleso obsahující 9 a tedy, že K = L. Nejprve ukážeme, že T(x) je ireducibilní nad Z. Kdyby existovaly nekonstantní polynomy f(x), g(x) E Z[x] takové, že T(x) = f(x)g(x), musely by být oba normované a stupně menšího než d. Dosazením 9 za x bychom pak dostali spor s definicí T(x). Podle věty 8.7 na straně 100 v [R] (popřípadě užitím techniky užité v příkladu v předchozí kapitole) dostáváme, že T(x) je ireducibilní nad Q. Nechť a E L, a ^ 0 je libovolné. Pak existuje polynom f(x) E Q[x] stupně menšího než d tak, že a = f (9). Protože T(x) je ireducibilní nad Q a f(x) má stupeň menší než T(x), je jejich největší společný dělitel (který existuje podle věty 5.18 na straně 83 v [R]) roven 1. Podle věty 5.20 na straně 84 v [R] existují polynomy u(x), v(x) E Q[x] tak, že f(x)u(x) + T(x)v(x) = 1. Dosazením 9 za x dostaneme u(9) = ^ E L, a tedy L je těleso. Stejným postupem můžeme dokázat, že neexistuje nenulový polynom s racionálními koeficienty stupně menšího než d, jehož by byl 9 kořenem, a proto je [K : Q] = d. Označme R okruh všech celých algebraických čísel v K. Protože 9 E R, pro Z[0] = {a0 + ai9 + • • • + ad_i0d-1; a0, ■ ■ ■, «d-i E Z} platí Z[9] C R. Obecně zde rovnost platit nemusí. Je však možné dokázat, že faktorgrupa R/Z[9] je konečná. Označme / počet jejích prvků. Budeme předpokládat, že jsme schopni spočítat všechno potřebné o tělese K, tj. počet tříd ideálů okruhu R, generátory grupy jednotek okruhu R, výše uvedenou konstantu /, všechny „malé" prvoideály až do zvolené hranice („velikost" prvoideálu P je dána počtem prvků oboru integrity R/P, o kterém je možné dokázat, že je to konečné těleso) a v případě, že R není okruh hlavních ideálů, i reprezentanty jednotlivých tříd ideálů (v tomto případě je situace o něco složitější, metodu síta v číselném tělese proto popíšeme jen pro případ, kdy je R okruh hlavních ideálů; podrobný popis metody v obecné situaci lze najít v [C]). Dodejme, že pro obecné těleso algebraických čísel K jde o velmi obtížný úkol, jehož náročnost silně stoupá se stupněm tělesa a který nebyl dosud zvládnut ani pro některá poměrně jednoduchá tělesa. Vzhledem k tomu, že však číslo 9 volíme, bude možné předpokladům tohoto odstavce vyhovět. Protože polynom T(x) je ireducibilní nad Q, kořeny polynomu T(x) v C jsou po dvou různé (vícenásobný kořen by byl kořenem derivace T'(x) a tedy největší společný dělitel (T(x),T'(x)) 23 METODA SÍTA V ČÍSELNÉM TĚLESE 56 by byl vlastním dělitelem polynomu T(x)). Nechť 9\ = 9, 92, ■ ■ ■ , 9d jsou všechny komplexní kořeny polynomu T(x). Z Viétovych vztahů a z hlavní věty o symetrických polynomech plyne, že hodnota libovolného symetrického polynomu o d proměnných v 9\, 92, ■ ■ ■, 9 a bude celé číslo. Proto můžeme definovat normu M : Z[9] —► Z následujícím způsobem. Pro libovolný prvek a E Z[9] existuje polynom g{x) E Z[x] tak, že a = g(9). Pak klademe M{a)=g{9l)...g{9d)EZ. Snadno se nahlédne, že tato definice nezávisí na volbě polynomu g a že platí N {aß) = Af(a)Af(ß). Poznamenejme, že je možné definici normy rozšířit na celý okruh R: pro libovolné ß E R je /ß E Z[9], položíme pak Af(ß) = f~dAf(fß). Je možné dokázat, že pro každé ß E R je Af(ß) celé číslo a že \Af(ß)\ je počet prvků faktorokruhu R/(ß), kde (ß) značí hlavní ideál generovaný prvkem ß. (Odtud plyne, že ß je jednotka okruhu R, právě když Af(ß) = 1.) Představme si, že známe nějaké celé číslo m takové, že T{m) = ±kN pro nějaké „malé" přirozené číslo k. Pak můžeme sestrojit homomorfismus okruhů p : Z[9] —► Z/NZ tak, že položíme p(9) = m + NZ. (Je jasné, že jde o homomorfismus aditivních grup. To, že p zachovává i násobení, plyne z toho, že N \ T (m).) Pro každé a E R platí f a E Z\9\. Vzhledem k tomu, že / pravděpodobně nebude dělitelné číslem N, můžeme předpokládat (f, N) = 1 (jinak máme netriviálního dělitele N). Nechť u E Z splňuje u f = 1 (modiV). Pak můžeme (p dodefinovat na celém R takto: pro libovolné a E R klademe p(a) = u ■ ip(fa). Je jasné, že pro a E Z[9] jsme tím p(a) nezměnili a že p je skutečně homomorfismus okruhů p : R —► Z/NZ. Nyní k čemu chceme dojít: rádi bychom našli a, b E Z tak, aby a + bm byla druhá mocnina v Z a současně aby a + b9 byla druhá mocnina v R. Je-li totiž a + bm = x2 pro x E Z a současně a + b9 = a2 pro a E R, máme šanci, že se nám podaří rozložit N: protože je p homomorfismus, platí p(a)2 = p(a2) = p(a + b9) = (a + bm) + NZ = x2 + NZ a je-li y nějaký reprezentant třídy p(a), tj. p(a) = y + NZ, platí x2 = y2 (mod N) a (x + y, N) by mohl být netriviální dělitel čísla N podobně jako u metody řetězových zlomků či metody kvadratického síta. Nalezení takových a, b je však velmi nesnadný úkol a jistě se nám je nepodaří najít rovnou. Použijeme proto podobné techniky jako v předchozích metodách a budeme rozkládat nad nějakými bázemi faktorizace. Jasná je situace pro čísla typu a + bm E Z, která budeme rozkládat nad „malými" prvočísly. Větší problém je s čísly typu a + b9 E Z\9\. Jak jsme se už zmínili, budeme pro jednoduchost předpokládat, že R je okruh hlavních ideálů. Pak je možné pro každý „malý" prvoideál P nalézt tt E R tak, že P = (tt). Budeme tedy ideály (a + b9) rozkládat nad baží faktorizace složené z těchto „malých" prvoideálů a vždy, když existuje nějaký rozklad (a + b9) = (7T1)kí...(7rn)k\ musí existovat jednotka r\ okruhu R, splňující a + b9 = 'q7vkl ...7vkn. Protože grupa jednotek okruhu R je konečně generovaná grupa (viz poznámku na konci předchozí kapitoly), můžeme zvolit její generátory a získanou jednotku r\ pomocí nich vyjádřit. 23 METODA SÍTA V ČÍSELNÉM TĚLESE 57 Celkem tedy čísla a + W rozkládáme nad bází faktorizace, složené z generátorů jednotlivých „malých" prvoideálů a z generátorů grupy jednotek okruhu R. Je možné dokázat, že pro libovolné prvočíslo p\ f jsou ideály tvaru p = (p, 9 — cp), kde Cp probíhá všechna (navzájem nekongruentní modulo p) řešení kongruence T(x) = 0 (modp), navzájem různé (ne však nutně všechny) prvoideály okruhu R dělící hlavní ideál (p). Přitom a + W E p pro nějaká a, b E Z nastane právě tehdy, když a + bcp E p, tj. právě když p I a + bcp (celá čísla jsou prvky p, právě když jsou dělitelná p, to plyne z toho, že p n Z musí být prvoideál v Z obsahující p). Označme v nějaké celé číslo splňující v f = 1 (modp). Nechť ß E R je libovolné. Pak f ■ ß E Z[0], tedy existuje polynom g (x) E Z[x] tak, že f ■ ß = g{6). Protože x — cp \ g (x) — g{cp) v Z[x], platí 9 — cp \ g (9) — g{cp) v R, proto vfß - vg{cp) = vg{9) - vg{cp) = v (g (6) - g{cp)) E p. Protože p | 1 - v f a p E p, je (1 — vf)ß E p, a tedy ß — vg(cp) E p. Je-li r zbytek po dělení celého čísla vg(cp) prvočíslem p, z p | (vg(cp) — r) plyne ß — r E p. V každé třídě rozkladu R/p tedy leží (jediné) z čísel 0,1,... ,p — 1, je tedy |i?/p| = p. Proto platí: jestliže tt E R splňuje (ir) = p, pak Af(ir) = p. Podobně jako u metody kvadratického síta budeme dvojice celých čísel (a, b), pro které máme šanci rozložit a + bm i a + b9 nad zvolenými bázemi faktorizace, hledat prosíváním. Uvažujme tedy všechny dvojice celých čísel (a, b), pro která \a\ i |6| jsou menší než zvolená mez. 1. Pro všechna malá prvočísla p vyznačme ty dvojice (a, b), pro které p dělí a i b. 2. (První inicializace) Pro všechny nevyznačené dvojice (a, b) inicializujme položku, obsahující přibližnou hodnotu log2(a + bm). 3. (První prosívání) Pro každou mocninu pk prvočísla, která je menší než zvolená mez, odečteme log2p od položek, příslušných těm nevyznačeným dvojicím (a, b), pro které p | a+bm. 4. Vyznačíme všechny dvojice (a, b), jejichž položka zůstala příliš velká. 5. (Druhá inicializace) Pro všechny nevyznačené dvojice (a, b) inicializujme položku, obsahující přibližnou hodnotu log2(ÁÍ(a + b9)). 6. (Druhé prosívání) Pro každé prvočíslo p, které je menší než zvolená mez a které nedělí /, nalezněme všechna (navzájem nekongruentní modulo p) řešení cp kongruence T(x) = 0 (modp). Pro každé takové řešení cp odečteme log2p od všech položek, příslušných těm dosud nevyznačeným dvojicím (a, b), pro které p \ a + bcp. 7. Pro všechny dvojice (a, b), jejichž položka zůstala menší než jistá mez, zjistíme rozkladem čísla ÁÍ(a+b9), zda opravdu všechny prvoideály dělící a+b9 jsou ve zvolené bázi faktorizace. Poznamenejme, že v bodě 6 odčítáme log2p jen jednou bez ohledu na to, zda prvoideál (p, 9 — Cp) vystupuje v rozkladu ideálu (a + b9) v první nebo ve vyšší mocnině (to totiž nejsme schopni rozlišit). Aby se vyloučil případ, že by se tím na některou užitečnou dvojici zapomnělo, je „jistá mez" užitá v bodě 7 o něco vyšší, než by bylo jinak zapotřebí. To však má zase za následek, že je nutná zde zmíněná kontrola rozkladem. Označme Pí, ■ ■ ■ ,pi bázi faktorizace použitou pro rozkládání čísel a+bm, dále pak u\,..., Uk generátory grupy jednotek okruhu R a konečně tti, ... ,7rn čísla, generující hlavní prvoideály 23 METODA SÍTA V ČÍSELNÉM TĚLESE 58 použité pro rozkládání ideálů (a + W). Po skončení uvedených sedmi bodů máme pro každou nevyznačenou dvojici (a, b), která prošla úspěšně kontrolou v bodě 7, rozklady e0^el r?l n J-hfí — ,,e;+1 „,el+kZl+k+l ei+k a + bm= (-lyyl1 ...pf, a + W = u?+1...ú k 7Ti . . . 7IV Tím dostaneme vektor (eo, ei,..., ei+k+n) přirozených čísel, který budeme interpretovat jako vektor z vektorového prostoru ^+k+l+n (sudá čísla jako nuly a lichá čísla jako jedničky). Až budeme mít těchto vektorů dost (tj. alespoň o několik více než 1 + k + / + n), provedeme Gaussovu eliminaci nad F2 (viz poznámku o „řídkých" maticích na konci sedmnácté kapitoly), abychom našli F2-lineární závislosti mezi získanými vektory. Každá taková závislost nám určí, která čísla a + bm, resp. a + W máme mezi sebou vynásobit, abychom dostali kýženou kongruenci x2 = y2 (mod N). Přitom místo a + b9 budeme rovnou násobit