Prímfaktorizációk és alkalmazásaik

Hasonló dokumentumok
A 2013/2014. tanévi Országos Középiskolai Tanulmányi Verseny első forduló MATEMATIKA I. KATEGÓRIA (SZAKKÖZÉPISKOLA) Javítási-értékelési útmutató

1. Végezd el a kijelölt mûveleteket a betûk helyére írt számokkal! Húzd alá azokat a mûveleteket,

Országos Középiskolai Tanulmányi Verseny 2010/2011 Matematika I. kategória (SZAKKÖZÉPISKOLA) Az 1. forduló feladatainak megoldása

Oszthatóság. Maradékos osztás

4. Hatványozás, gyökvonás

5. Logaritmus. I. Nulladik ZH-ban láttuk: 125 -öt kapjunk. A 3 5 -nek a 3. hatványa 5, log. x Mennyi a log kifejezés értéke?

1. feladat Oldja meg a valós számok halmazán a következő egyenletet: 3. x log3 2

Juhász István Orosz Gyula Paróczay József Szászné Dr. Simon Judit MATEMATIKA 10. Az érthetõ matematika tankönyv feladatainak megoldásai

Középiskolás leszek! matematika. 13. feladatsor

RSA algoritmus. P(M) = M e mod n. S(C) = C d mod n. A helyesség igazoláshoz szükséges számelméleti háttér. a φ(n) = 1 mod n, a (a 1,a 2,...

Exponenciális és logaritmikus egyenletek, egyenletrendszerek, egyenlôtlenségek

FELVÉTELI VIZSGA, július 15.

M. 2. Döntsük el, hogy a következő két szám közül melyik a nagyobb:

9. Exponenciális és logaritmusos egyenletek, egyenlőtlenségek

Gyökvonás. Hatvány, gyök, logaritmus áttekintés

Egy látószög - feladat

7. Számelmélet. 1. Lehet-e négyzetszám az a pozitív egész szám, amelynek tízes számrendszerbeli alakjában 510 darab 1-es és valahány 0 szerepel?

2010/2011 es tanév II. féléves tematika

2014/2015-ös tanév II. féléves tematika

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI KÖZÉPSZINT Exponenciális és Logaritmusos feladatok

Számelméleti alapfogalmak

Vektorok. Vektoron irányított szakaszt értünk.

7. tétel: Elsı- és másodfokú egyenletek és egyenletrendszerek megoldási módszerei

Minden egész szám osztója önmagának, azaz a a minden egész a-ra.

Bevezetés a programozásba. 3. Előadás Algoritmusok, tételek

OPTIMALIZÁLÁS LAGRANGE-FÉLE MULTIPLIKÁTOR SEGÍTSÉGÉVEL

MATEMATIKA FELADATLAP a 8. évfolyamosok számára

(a n A) 0 < ε. A két definícióbeli feltétel ugyanazt jelenti (az egyenlőtlenség mindkettőben a n A < ε), ezért a n A a n A 0.

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Számelmélet I.

Waldhauser Tamás december 1.

Lineáris egyenletrendszerek

Összeállította: dr. Leitold Adrien egyetemi docens

GAZDASÁGI MATEMATIKA I.

Határozzuk meg, hogy a következő függvényeknek van-e és hol zérushelye, továbbá helyi szélsőértéke és abszolút szélsőértéke (

Heves Megyei Középiskolák Palotás József és Kertész Andor Matematikai Emlékversenye évfolyam (a feladatok megoldása)

2. modul Csak permanensen!

f (ξ i ) (x i x i 1 )

5. A logaritmus fogalma, a logaritmus azonosságai

megtalálásának hihetetlen nehéz voltán alapszik. Az eljárás matematikai alapja a kis FERMAT-tétel egy következménye:

IV. Algebra. Algebrai átalakítások. Polinomok

MATEMATIKA ÉRETTSÉGI október 25. KÖZÉPSZINT I.

MATEMATIKA 9. osztály I. HALMAZOK. Számegyenesek, intervallumok

Házi feladatok megoldása. Harmadik típusú nyelvek és véges automaták. Házi feladatok megoldása. VDA-hoz 3NF nyelvtan készítése

"ALAPÍTÓ OKIRAT... A továbbiakban változatlanul a 13. ponttal bezárólag. Határidő: határozat megküldésére: október 30.

IX. A TRIGONOMETRIA ALKALMAZÁSA A GEOMETRIÁBAN

Ellenállás mérés hídmódszerrel

Vektortér fogalma vektortér lineáris tér x, y x, y x, y, z x, y x + y) y; 7.)

(11,05 Miskolczi Ferenc megérkezett, a létszám: 21 fő)

Nagy Gábor compalg.inf.elte.hu/ nagy ősz

Térbeli pont helyzetének és elmozdulásának meghatározásáról - I.

HHF0CX. k darab halmaz sorbarendezésének a lehetősége k! Így adódik az alábbi képlet:

Prímtesztelés, Nyilvános kulcsú titkosítás

Els gyakorlat. vagy más jelöléssel

Kovács Judit ELEKTRO TEC HNIKA-ELEKTRONIKA 137

Végeredmények, emelt szintû feladatok részletes megoldása

Nagy Gábor compalg.inf.elte.hu/ nagy ősz

Gyakorló feladatsor 9. osztály

finanszírozza más városnak, tehát ezt máshonnan finanszírozni nem lehet.

Minta feladatsor I. rész

Győry Ákos: A Titu-lemma. A Titu-lemma. Győry Ákos Földes Ferenc Gimnázium, Miskolc

Számelmélet (2017. február 8.) Bogya Norbert, Kátai-Urbán Kamilla

11. évfolyam feladatsorának megoldásai

1. Egészítsük ki az alábbi Python függvényt úgy, hogy a függvény meghatározza, egy listába, az első n szám faktoriális értékét:

A vasbeton vázszerkezet, mint a villámvédelmi rendszer része

Algebrai struktúrák, mátrixok

MATEMATIKA FELADATLAP a 8. évfolyamosok számára

19. Függvények rekurzív megadása, a mester módszer

Kongruenciák. Waldhauser Tamás

MATEMATIKA FELADATLAP a 8. évfolyamosok számára

l.ch TÖBBVÁLTOZÓS FÜGGVÉNYEK HATÁRÉRTÉKE ÉS DIFFERENCIÁLHATÓSÁGA

MATEMATIKA FELADATLAP a 8. évfolyamosok számára

MATEMATIKA FELADATLAP a 8. évfolyamosok számára

Absztrakt vektorterek

Numerikus módszerek 2.

1144 PROGRAMOZÁSMÓDSZERTAN, PROGRAMOZÁSI NYELVEK

Határozott integrál. Newton -Leibniz szabály. alkalmazások. improprius integrál

Házi feladatok megoldása. Automaták analízise, szintézise és minimalizálása. Házi feladatok megoldása. Házi feladatok megoldása

MATEMATIKA FELADATLAP a 8. évfolyamosok számára

Szakács Lili Kata megoldása

Oszthatóság. Oszthatóság definíciója (az egészek illetve a természetes számok halmazán):

Hatványozás. A hatványozás azonosságai

2016, Diszkrét matematika

OSZTHATÓSÁG. Osztók és többszörösök : a 3 többszörösei : a 4 többszörösei Ahol mindkét jel megtalálható a 12 többszöröseit találjuk.

MATEMATIKA FELADATLAP a 8. évfolyamosok számára

0.1 Deníció. Egy (X, A, µ) téren értelmezett mérhet függvényekb l álló valamely (f α ) α egyenletesen integrálhatónak mondunk, ha

Algebrai kifejezések. 1. Az algebrai kifejezés. 1. a) x+ 5 b) x5 c) x 5. d) x 5. e) x. f) 1 x

II. A számtani és mértani közép közötti összefüggés

Diszkrét matematika I.

II.4. A SZÁZHOLDAS PAGONY. A feladatsor jellemzői

Diszkrét matematika I.

MATEMATIKA FELADATLAP a 8. évfolyamosok számára

823. A helyesen kitöltött keresztrejtvény: 823. ábra A prímek összege: = 9; 824. a) 2 1, 2 4, 5 3, 3 5, 2$ 825.

II. EGYENLETEK ÉS EGYENLŐTLENSÉGEK

XX. Nemzetközi Magyar Matematika Verseny

Egészrészes feladatok

MATEMATIKA JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ

Matematika A1a - Analízis elméleti kérdései

A motiválás lehetőségei az algebra tanításában

4. Legyen Σ = {0, 1}. Adjon meg egy determinisztikus véges automatát, amely azokat a szavakat fogadja el,

Arányosság. törtszámot az a és a b szám arányának, egyszer en aránynak nevezzük.

Átírás:

Prímfktorizációk és lklmzásik Szkdolgozt Írt: Hmmer Gergő Mtemtik BSc Alklmzott mtemtikus szkirány Témvezető: reud Róbert egyetemi docens Algebr és Számelmélet Tnszék Eötvös Loránd Tudományegyetem Természettudományi kr 2011

.

Trtlomjegyzék Bevezető 5 1. Prímtesztek 7 1.1. A kis ermt teszt......................... 7 1.2. Solovy Strssen prímteszt.................... 9 1.3. Miller Rbin Lenstr prímteszt.................. 13 1.4. Agrwl-Kyl-Sxen prímteszt................. 21 2. Prímfktorizációk 22 2.1. Tényezőkre bontás osztássl.................... 22 2.2. ermt-módszer........................... 25 2.3. Szit módszer............................ 26 2.4. Tényezőkre bontás Monte Crlo módszerrel........... 28 3. Alklmzás 36 3.1. RSA-kódolás............................. 36 Irodlomjegyzék 39 III

Köszönetnyilvánítás Ezúton szeretnék köszönetet mondni témvezetőmnek, reud Róbertnek, ki félév során mindig szkított rám időt, kérdéseimre körültekintően és jól érthetően válszolt, vlmint észrevételeivel és hsznos tnácsivl segített szkdolgoztom elkészítésében. Köszönettel trtozom még csoporttársimnk kik tnácsokt dtk L A TEX hsználtához, vlmint köszönöm csládomnk, miért támogtják tnulmányimt. IV

Bevezető A prímek mtemtikán belül számelmélet témkörébe trtoznk. Ez z ág z egyik legrégebbi, mégis mi npig helytáll. Sőt, nemcsk, hogy helytáll, de olyn egyszerűen megérthető problémákt vet fel, melyeket z utc embere is megért, de ezekre néhol kár több ezer éves kérdésekre mi npig nem tudunk válszt dni. És nemcsk hogy nem tudunk, de jelenlegi tudásunk szerint reménytelennek tűnik, hogy közeljövőben ezeket megoldjuk. Csk, hogy néhányt soroljunk, ilyen z ikerprím sejtés, Mersenne/ermt-prímekkel kpcsoltos sejtések, de például ngy számok prímtényezős felbontásánk megállpítás is z. Persze bárki tudn olyn lgoritmust mondni, mely megtlálj felbontást, itt z igzi feldt z, hogy gyorsn (polinomiális időben végezzük el ezt. Ezen szkdolgozt ennek problémánk részeredményeit és lklmzását tárgylj, hiszen lenyűgöző, hogy egy ókori problémánk kódolásbn és titkosításbn mi npig széles körben elterjedt és hsznált lklmzás vn. Tehát tém prímtényezős felbontások, ehhez vázolunk egy menetrendet. Először is jó lenne, h el tudnánk gyorsn dönteni egy tetszőleges számnál, hogy z prím-e, ez nyilván hsznos, h prímtényezőket krunk megállpítni. Ennek során több prímtesztet is vizsgálunk megbízhtóság és gyorsság szempontjából. Ezt követően prímtényezőket meghtározó lgoritmusokkl fogllkozunk. Bár ngy számok felbontását nem tudjuk meghtározni gyorsn, de részeredmények vnnk, melyek z lklmzás szempontjából fontosk lesznek. Ismertetjük, hogy ezek hogyn és miért működnek, illetve milyen htékonysággl. Rátérünk végül z lklmzásokr. Ezek közül legfontosbb z RSAkódolás, mely npjinkbn is hsznált titkosító lgoritmus. Ez kihsználj, hogy gyorsn tlálunk ngy prímeket, és zt, hogy z ezek szorztából kpott összetett számot nem tudjuk gyorsn tényezőire bontni. Látni fogjuk viszont, hogy nem mindegy, milyen prímeket válsztunk; h ügyetlenek vgyunk, kkor létezik htékony támdás titkosítás ellen. Szkdolgoztombn rövid elméleti ismertetők után bemuttom z egyes 5

tesztek és lgoritmusok gykorlti megvlósítását. A struktogrmmok lpján elkészítettem progrmokt is, ezt CD-n mellékelem szkdolgozthoz. A prímteszteknél bebizonyítom, hogy Miller Rbin Lenstr prímteszt z ddigi legjobb, így ezt érdemes hsználni. A fktorizációs lgoritmusoknál rövidebb feldtok megoldásávl igyekszem érthetőbbé tenni ezek működési elvét. A Monte Crlo módszereknél z áltlm megvlósított progrm futási eredményeit is közlöm progrm htékonyságánk látámsztásként. 6

1. fejezet Prímtesztek Ahogy zt bevezetőben már említettem, nem tudunk tetszőlegesen ngy számot gyorsn fktorizálni, de szerencsére, h csk z feldt, hogy gyorsn eldöntsük egy számról, hogy prím-e, kkor pozitív válszt tudunk dni. Ezt úgy tudjuk vizsgálni, hogy olyn feltételeket/tuljdonságokt ellenőrzünk, melyeket csk vgy mjdnem csk prímek teljesítenek. 1.1. A kis ermt teszt Az első ilyen teszt kis ermt-tétel eredményét hsználj fel, mely következőképpen szól: p prímre és Z, (, p = 1-re : p 1 1 (mod p Hogy kphtunk ebből prímtesztet? Egy n > 2 számot véve, h ez vlmely -r (, n = 1 mellett nem teljesíti fenti kongruenciát, kkor n biztosn összetett. H teljesíti, kkor több -r is megvizsgálhtjuk, így még biztosbbk lehetünk benne, hogy n prím. Rossz hír zonbn, hogy vnnk olyn összetett számok, melyek teljesítik kis ermt-tételt vlmely -r, ezeket -lpú álprímeknek hívjuk, de még olyn számok is vnnk, melyek minden -r, (, n = 1 mellett teljesítik tétel feltételét, ezeket univerzális álprímeknek hívjuk. További rossz hír, hogy 1992-ben igzolták, hogy végtelen sok univerzális álprím létezik, de prímekhez képest jóvl ritkábbn 7

fordulnk elő. Tehát h sok -r megvizsgáljuk, hogy teljesül-e kongruenci, kkor vlószínűleg prímet tláltunk. Hogyn ellenőrizhető ez? A válsz z ismételt négyzetre emelések módszere: 1. Kiszámítjuk n 1 kettes számrendszerbeli lkját. 2. Kiszámítjuk 2, 4, 8, 16,... (mod n értékeket, úgy, hogy minden lépésben négyzetre emelünk, és vesszük z n-nel vló osztási mrdékot. 3. Összeszorozzuk megfelelő htványokt, zz zon indexűeket, melyek n 1 bináris lkjábn 1-essel szerepelnek, és minden lépésben szorztot redukáljuk modulo n. 4. H így 1-et kpunk eredményül, kkor n-et prímnek nyilvánítjuk, különben n biztosn összetett szám. Az lgoritmus: kis ermt n megdott szm; lp; m := n 1; lnko(, n = 1; mr := 1; t := [log(2, m]; tomb[1] := 2 (mod n; i, j, k := 2, 1, 1; j <= t + 1 m = 1 (mod 2 V binrislk[j ] := 1; binrislk[j ] := 0; m := [m/2]; j := j + 1; i <= t + 1 tomb[i] := (tomb[i 1] 2 (mod n; i := i + 1; k <= t + 1 binrislk[k] = 1 V mr := mr tomb[k SKIP 1] (mod n; k := k + 1; mr = 1 V Kiir( prim; Kiir( nem prim; 8

Vizsgált: Az lgoritmusunk kész vn, de kíváncsik vgyunk, hogy milyen gyors. 1. A kettes számrendszerbeli lk log 2 (n 1 lépésben véget ér, hiszen 2-vel osztunk mrdékosn. 2. A struktogrmm jelöléseivel itt t drb négyzetre emelést, és ennyi drb redukciót végzünk el, és mivel 2t 2 log 2 (n 1, ezért ez legfeljebb 2log 2 (n 1 lépést vett igénybe. 3. Legfeljebb t drb szorzást és t drb redukciót végeztünk, ez szintén legfeljebb 2log 2 (n 1 lépés. Tehát összesen legfeljebb 5log 2 (n 1 lépést hjtunk végre, hol 1 lépés szorzás, négyzetre emelés, osztás vgy redukció. Egy 500-jegyű számr ez körülbelül 9000 lépés, mi számítógéppel gyorsn kiszámíthtó. Megjegyzés: A második lépést végezhetnénk egy időben z elsővel. Eleve csk zokt htványokt számolnánk ki, mi nekünk kell, így még tovább csökkenne lépésszám. A későbbiekben ezt felhsználjuk. Kptunk egy prímtesztet, mi gyors, és mjdnem biztosn prímet tlál, ugynkkor végtelen sok számr tévedhet (univerzális álprímek. A következő prímteszt már z álprímeket is lebukttj. 1.2. Solovy Strssen prímteszt A teszt feltlálóiról kpt nevét, és következőképpen szól: Legyen n > 1 pártln szám, és tekintsük z p 1 2 ( n (mod n kongruenciát, hol ( n Jcobi szimbólumot jelöli (lásd lentebb. H n prím, kkor ez kongruenci minden 0 (mod n-re teljesül, h n összetett, kkor egy modulo n vett teljes mrdékrendszer kevesebb, mint felére teljesül. Ismét feltesszük kérdést, hogyn kpunk ebből prímtesztet. 9

Válsszunk véletlenszerűen 50 db 0 (mod n értéket, melyek egymássl is páronként inkongruensek. H kongruenci leglább egy -r nem teljesül, kkor n biztosn összetett. H minden -r teljesül, kkor 2 50 -nél kisebb vlószínűsége, hogy szám öszetett, hiszen egy teljes mrdékrendszer elemeinek kevesebb, mint felére teljesül kongruenci, tehát egy próbár 1/2-nél kisebb z esélye, hogy teljesül feltételünk, és ez mind z 50 független esetben így vn. (50 helyett tetszőleges drbszámú -r próbálhtunk, így tetszőlegesen kicsivé téve tévedés vlószínűségét. Hogyn ellenőrizhető feltétel? A kongruenciát könnyen láthtón z előbb ismertetett ismételt négyzetre emelések módszerével gyorsn ki tudjuk számítni. A Jcobi szimbólumhoz először bevezetünk két foglmt: Legyen p > 2 prím és (, p = 1. Az számot kvdrtikus mrdéknk, illetve kvdrtikus nemmrdéknk nevezzük, h z x 2 (mod p kongruenci megoldhtó, illetve nem megoldhtó. Az ( p Legrende szimbólumot következőképp értelmezzük: ( p = { 1, h kvdrtikus mrdék modulo p; 1, h kvdrtikus nemmrdék modulo p; A Jcobi szimbólum definíciój következő: n > 1 pártln szám, n = p 1 p 2 p r, hol p i -k nem feltétlen különböző prímek, és (, n = 1. Ekkor ( ( ( := p1 p2... pr ( n szorztként értelmezzük Jcobi szimbólumot, hol ( p i Legrende-szimbólum. Azonnl látszik, hogy definíciót nem hsználhtjuk fel prímteszt készítése során, hiszen n prímtényezőire lenne szükség, ám ezeket tipikusn nem ismerjük. 10

Ehelyett Jcobi szimbólumot tuljdonsági lpján könnyen számíthtjuk egy kibővített euklideszi lgoritmussl. A tuljdonságok következők: 1.2.1. Tétel (A Jcobi-szimbólum tuljdonsági. Tegyük fel, hogy z lábbi Jcobi-szimbólumok értelmesek. Ekkor: 1. b (mod n ( ( n = b n 2. ( ( ( ( ( ( b m = b m m ; mn = n m ; 3. ( { 1 1, h m 1 (mod 4; m = 1, h m 1 (mod 4; 4. ( { 2 1, h m ± 1 (mod 8; m = 1, h m ± 3 (mod 8; 5. ( m n { ( n = m, h n m 1 (mod 4; ( n m, egyébként, (n, m pártln. Az lgoritmus során mindig rr törekszünk, hogy számlálóbn álljon kisebb szám (h nem így lenne, kkor z ötödik tuljdonságot hsználnánk ezek felcserélésére. Vlójábn egymássl és 0-vl inkongruens -kt próbálunk, melyek egy teljes mrdékrendszer elemeit lkotják, így ezeket érdemes n-nél kisebbre válsztni, tehát z ( n Jcobi szimbólumbn tipikusn nevező mindig ngyobb lesz. Ezután h számláló páros, kkor negyedik és második tuljdonság lpján kettes szorzókt leválsztjuk számlálóból, és z eredményt ennek megfelelően változttjuk. Ekkor számlálóbn grntáltn kisebb pártln szám áll, tehát cseréljünk z ötödik tuljdonság lpján, és z első felhsználásávl redukáljuk számlálót, hogy ismét kisebb legyen nevezőnél (mrdékos osztást végzünk. Ezt ddig csináljuk, míg 0. A struktogrmmbn pontosn ez történik: 11

Kibovitett euklideszi lgoritmus eredmeny = 1; segedvltozo = 1; ( n Jcobi szimbolum 0 0 (2 := /2 n 1 (8 n 7 (8 V eredmeny := eredmeny 1 segedvltozo :=, := n, n := segedvltozo n 3 (4 3 (4 V eredmeny := eredmeny 1 segedvltozo := [/n], := segedvltozo n A teszt vizsgált: 1. Az ismételt négyzetre emelések módszeréről z előbb beláttuk, hogy O(log 2 n lépésszámú. 2. A Jcobi szimbólum számítás is gyorsn megy. Ahogy említettük, ez egy kibővített euklideszi lgoritmus. Részletesen, ( b számolásánál, z -t b-vel osztv mrdékosn kpjuk, hogy ( b ( = r1 b, hol r1 < b. 2 H r 1 páros, kkor ( 2 b kiemelésével (hányszor csk lehetséges számláló ismét feleződik. H r 1 pártln, kkor r 1 nevezőbe kerül, számláló pedig b-nek r 1 szerinti r 2 mrdék, hol ismét r 2 < r 1 2. Tehát számláló mindig feleződik. Tegyük fel, hogy z l-edik lépésben ér véget z lgoritmus, zz r l+1 már 0. Ekkor legfeljebb l + 1 lépést végeztünk, és mivel minden lépésben számláló feleződik, így 1 r l b 2 l ezért 2 l b, tehát l log 2 b. 12

Kpjuk, hogy lépésszám legfeljebb log 2 b. Ehhez még hozzájön ( 2 m kiszámításához szükséges lépésszám, mi egy-egy mrdékos osztást jelent 8-cl. Durván becsülve ebből is legfeljebb l drb vn. A számláló és nevező cseréjével is változik z eredmény, ekkor z ötödik tuljdonság lpján egy-egy 4-gyel vló mrdékos osztást kell végeznünk. Könnyen láthtón, legrosszbb esetben ebből is legfeljebb l drbot végeztünk. Ez összesen 3 log 2 b lépés. 3. Láttuk, hogy z ismételt négyzetre emelések módszere 5 log 2 n lépésben elvégezhető, ehhez hozzájön 3 log 2 n lépés Jcobi szimbólum számításkor. Tehát Solovy Strssen prímteszt lépésszám O(log 2 n, mi számítógéppel szintén gyorsn számíthtó. Tehát második prímtesztünk gyors, előnye z elsővel szemben, hogy itt nincsenek álprímek, ugynis h egy teljes mrdékrendszer modulo n elemeinek több, mint felére ellenőriznénk Solovy-Strssen feltételét, kkor biztosn lebukn" egy összetett szám. Persze ngy n-re ez időigényes lenne, ám erre nincs is szükség, hiszen például, h csk ezer drb -r ellenőrzünk, z lépésszám ezerszerese, mi még gyors, ám ekkor már gykorltilg 0 vlószínűsége tévedésnek. 1.3. Miller Rbin Lenstr prímteszt A teszt lpj, hogy h p prím, és x 2 1 (mod p, kkor csk x ±1 (mod p lehetséges. Így h veszünk egy 0 (mod p számot, kkor z p 1, p 1 2, p 1 4, p 1 8,... számok p-vel vló osztási mrdék vgy mind 1, vgy szükségképpen egyszer 1 követi z 1-eseket, sőt p 1 -nek szükségképpen 1-nek kell lennie (kis ermt tétel. Azonbn, h p nem prím volt, kkor megmutthtó, hogy sok -r már másfjt soroztot kpunk. Ezek lpján Miller Rbin Lenstr teszt következő: Legyen n > 1 pártln szám, n 1 = 2 k r, hol r pártln. Tekintsük z 13

r, 2r, 4r... 2k 2r, 2k 1 r soroztot. H r mrdék 1 modulo p, vgy sorozt elemeinek n-nel vló osztási mrdéki közt előfordul 1, kkor ezt jó soroztnk hívjuk. H n prím, kkor minden 0 (mod n-re jó soroztot kpunk. H n összetett, kkor egy modulo n vett teljes mrdékrendszer elemeinek kevesebb, mint felére lkot jó soroztot. Miben más ez, mint Solovy Strssen prímteszt? A sorozt elemeinek modulo n vett mrdéki szintén ismételt négyzetre emelésekkel gyorsn számíthtók, sőt, itt nincs szükség Jcobi szimbólumok kiszámításár. Továbbá bonyolultbb módszerekkel megmutthtó, hogy egy teljes mrdékrendszer elemeinek nemcsk hogy legfeljebb felére, de kevesebb mint negyedére lkot jó soroztot egy összetett n. Az is megmutthtó, hogy Miller Rbin Lenstr "eredményesebb". Pontosítv: 1.3.1. Tétel (MRL eredményessége. Egy dott n-re, h egy jó soroztot lkot, kkor z kielégíti Solovy Strssen feltételt. Bizonyítás: Szeretnénk belátni, hogy h egy -r jó soroztot kpunk, kkor p 1 2 ( (mod n is teljesül. n H n prím, kkor ez triviálisn teljesül, hiszen mindkét teszt lényege, hogy prímek jó soroztot lkotnk, és teljesítik fenti kongruenciát minden -r. Tegyük fel tehát, hogy n összetett. Ekkor két részre bontjuk bizonyítást, szerint, hogy r mrdék 1 modulo p, vgy sorozt elemeinek n-nel vló osztási mrdéki közt előfordul 1. 1. Tekintsük z r 1 (mod n esetet. Mivel n 1 = 2 k r, így n 1 2 = 2 k 1 r, mit beírv bl oldlr kpjuk, hogy n 1 2 = 2k 1r = ( r 2k 1 1 2k 1 1 (mod n. 14

Tehát bl oldlon 1 áll. Legyenek n prímosztói p 1, p 2,...,p s. Ekkor jobb oldl definíció lpján ( ( ( = p1 p2... ps ( n hol ( p i Legrende szimbólum. Tekintsük vlmely i-re z ( p i tényezőt. Ez definíció szerint 1, h kvdrtikus mrdék modulo p i, egyébként 1. Egy tétel szerint, kvdrtikus mrdék modulo p i pontosn kkor, h p i 1 2 1 (mod p i. Mivel Jcobi szimbólum ±1 értéket vehet fel, és mivel r pártln, így h jobb oldl r-edik htványát vesszük, kkor szimbólum és htvány egyszerre lesz +1 vgy 1. Ugynez Legrende szimbólumokr is igz. Azt állítom, hogy minden Legrende szimbólum r-edik htvány 1. Ehhez egy rövid állítást igzolunk: 1.3.1. Lemm. ( r ( p i 1 r p i = 1 2 1 (mod pi Bizonyítás: => ( r ( p i = 1 = p i = 1, hiszen r pártln és Legrende szimbólum ±1. Ekkor viszont z említett tétel szerint p i 1 2 1 (mod p i. Ezt r-edik htványr emelve pont jobb oldlt kpjuk. <= A kis ermt tételből tudjuk, hogy p i 1 1 (mod p i. Ezért p i 1 2 ±1 (mod p i lehetséges. De h ez 1 lenne, kkor mivel r pártln z r-edik htvány is 1 lenne, mi ellentmondn jobb oldlnk, és most ezt tettük fel. Tehát p i 1 2 1 (mod p i, ez viszont tétel lpján ekvivlens zzl, hogy Legrende szimbólum értéke 1. Így ennek r-edik htvány is 1. H tekintjük z ( p i 1 r 2 kifejezést, kkor feltételünk mitt ( p i 1 r 2 ( r p i 1 2 1 p i 1 2 1 (mod p i. 15

Az 1.3.1 lemm mitt így Legrende szimbólumok r-edik htványi is 1-ek, tehát Jcobi szimbólum r-edik htvány is 1. Mivel r pártln, így jobb oldlon is 1 áll. 2. A sorozt elemeinek n-nel vló osztási mrdéki közt előfordul 1, zz j : 2j r 1 (mod n A bl oldl kiszámítás itt is könnyen megy, felhsználv, hogy n 1 2 = 2 k 1 r: n 1 2 = 2k 1r = 2j 2 k j 1r = ( 2j r 2 k j 1 ( 1 2k j 1 1 (mod n h j < k 1. Be kell tehát látnunk, hogy ( n =1. Vegyünk egy p-t, mely prímosztój n-nek. Ekkor persze p-re is teljesül feltétel, vgyis 2j r 1 (mod p. H ezt négyzetre emeljük, kpjuk, hogy 2j +1r 1 (mod p. Ebből következik, hogy modulo p rendjére fennáll o p ( 2 j r és o p ( 2 j +1 r. Tehát rendje 2 j +1 többszöröse lehet, sőt csk egy lklms l pártln többszöröse, hiszen r-ben nem lehet 2-es prímtényező. De kis ermt tételből tudjuk, hogy p 1 1 (mod p, és egy tétel lpján rend osztój minden k pozitív egész számnk, melyre k 1 (mod p teljesül, ezért o p ( p 1 is fennáll. Az oszthtóság definíciój lpján p 1 = 2 j +1 lh, zz p 1 2 = 2 j lh, egy lklms h-vl. Ezt és fent említett kvdrtikus mrdékokr vontkozó tételt felhsználv z ( p p 1 2 = 2j lh = ( 2j l h (mod p 16

összefüggést kpjuk. Mivel o p ( = 2 j +1 l, ezért 2j +1 l 1 (mod p és 2 j +1 l legkisebb ilyen pozitív egész, és mivel p prím, ezért h gyököt vonunk kongruenciából, csk 2j l 1 (mod p lehetséges. Adódik tehát, hogy ( p értéke h = p 1 pritásától függ, hol l pártln. 2 j +1 l Ezt minden prímosztór elvégezzük. Legyen n = p 1 p 2... p s, hol p i -k nem feltétlen különböző prímek. Minden p i -re kpunk h i -ket, és Jcobi szimbólum definíciój lpján ( n = ( p1 ( p2... ( ps = ( 1 (h 1 + +h s. Kellene tehát, hogy h i páros. A fentiekből kifejezve p i -ket kpjuk, hogy p i = 1 + 2 j +1 l i h i. Ezt beírjuk n knonikus lkjáb: n = (1 + 2 j +1 l i h i = 1 + 2 j +1 (h 1 l 1 + + h s l s +... A mrdék oszthtó lesz 2 j +2 -vel, ezért nem írtuk őket ki. elhsználv még, hogy n = 2 k r + 1, és 2 j +1 -gyel osztv kpjuk, hogy 2 k j 1 r = h i l i + 2 (... Ebből dódik, hogy h i l i páros. 1.3.2. Lemm. Legyen h i, l i Z + i = 1, 2... s, és l i pártln i-re. Ekkor h 1 + h 2 + + h s páros h 1 l 1 + h 2 l 2 + + h s l s páros. Bizonyítás: => H h i -k összege páros, kkor volt vlmilyen pritás sorrendjük (pl.: páros, pártln, pártln.... Ezeket pártln számml szorozv, párosok párosok mrdnk, pártlnok pedig pártlnok, tehát pritás nem változik, így z összeg sem. 17

<= Hsonlón, h i l i szorztoknk volt vlmilyen pritás sorrendje. H tgonként leosztunk megfelelő l i -vel, kkor ugynolyn mrd pritás, hiszen szorztokbn h i -k voltk meghtározók. Az 1.3.2. lemmából dódón tehát h i -k összege is páros, ezzel tételünket beláttuk j < k 1 esetén. A j = k 1-re hsonlón megy bizonyítás. A feltételbe helyettesítve kpjuk, hogy 2j r = 2k 1r = n 1 2 1 (mod n tehát ( n = 1-et kell belátni. A bizonyítás ugynúgy elmondhtó, mint j < k 1 esetben, csk végén j = k 1-et helyettesítve kpjuk 2 k j 1 r = 2 0 r = r = h i l i + 2 (.... Mivel r pártln, így ebből egy páros számot kivonv kpjuk, hogy hi l i pártln, ebből z előbbivel hsonló módon következik hogy h i is pártln, zz ( n = ( 1 hi = 1. Ezzel tételünket beláttuk. Érdemes tehát megvlósítni: 18

Miller-Rbin-Lenstr n dott szm, m := n 1, k := 0, prim := flse m 0 (2 m := m/2, k := k + 1 t := [log(2, m], binrislk[t + 1], tomb, i := 0 i < t + 1 m 0 (2 V binrislk[i] := 1 binrislk[i] := 0 m := m/2, i := i + 1 i, j, l, g := 0, 0, 1, 1 forll j in tomb[j ] segedtomb1[0] := tomb[j ] g < t + 1 segedtomb1[g] := segedtomb1[g 1] 2 (mod n g := g + 1 segedtomb[0] = tomb[j ] i < k i = 0 V l < t + 1 segedtomb[i] := (segedtomb[i b.lk[l] = 1 1] 2 (mod n V segedtomb[i] := segedtomb[i] (segedtomb1[l] (n i < k segedtomb[0] = 1 V prim := true; Kilep( prim := prim (segedtomb[i] = n 1 prim = flse V Kilep( prim = true V Kiir(prim Kiir(nemprim 19

A tomb nevű vektor trtlmzz zokt z -kt, melyek egymássl inkongruensek és 0 (mod n. A binrislk nevű vektorbn n 1 kettes számrendszerbeli lkj tlálhtó. A segedtomb-ben számítódnk z htványok mrdéki modulo n, segedtomb1 pedig z ismételt négyzetre emelések módszeréhez hsznált segítség. H futás végén prim nevű logiki változó igz, kkor n-et prímnek nyilvánítjuk, különben összetett számnk. A progrm elején kezdeti értékdások után, kiszámítjuk r kettes számrendszerbeli lkját. Ezután kettőhtvány htványit meghtározzuk modulo n. A főciklusbn előbb r értékét számoljuk ki, mjd ebből sorozt többi elemének értékét modulo n, és ciklus végén ellenőrizzük, hogy jó soroztot kptunk-e (h ez vlhol nem teljesül, kkor megáll progrm. Vizsgált: 1. A segedtomb1-ben kiszámítjuk z kettőhtvány kitevőjű htványit modulo n, ez t-szer fut, mi kevesebb, mint log 2 m, tehát ez legfeljebb 2 log 2 n lépés. 2. Itt is hsználjuk z ismételt négyzetre emelések módszerét, hogy meghtározzuk r mrdékát modulo n. Ennek hogy zt z 1.1 -es részben beláttuk lépésszám O(log 2 n. 3. Ezután k 1 drb négyzetre emelést és mrdékos osztást végzünk, hogy meghtározzuk sorozt többi tgjánk mrdékát. A legrosszbb esetben k log 2 m-mel egyenlő, így z ehhez részhez szükséges lépésszámot is felülről korlátozhtjuk log 2 n-nel (sőt ez ngyon ngyvonlú becslés, hiszen ekkor z előbbi pont lépésszám csupán 1 mrdékos osztásból álln. 4. A végső lépésben csk ellenőrzéseket végzünk, legfeljebb k drbot, és átállítjuk prim logiki változó értékét, h szükséges. Tehát összesen ez is legfeljebb const log 2 n lépésszámú lgoritmus, így ez z eddigi leghtékonybb prímtesztünk. 20

1.4. Agrwl-Kyl-Sxen prímteszt Eddig tláltunk tetszőlegesen pontos, gyorsn ellenőrizhető prímtesztet. elmerül kérdés zonbn, hogy vn-e olyn prímteszt, mi nem csk tetszőleges, de 100 százlékos pontossággl eldönti egy számról, hogy z prím-e, és persze ezt gyorsn (logritmikus lépésszámml számítj. A válsz pozitív, ugynis 2002-ben három indii mtemtikus, Agrwl, Kyl és Sxen tlált egy ilyet. A teszt ötlete következő: Legyen (c, n = 1. H tekintjük z f c = x n c, g c = (x c n polinomokt Z n felett, kkor h n prím, f c = g c teljesül, egyébként vn olyn k, melyre ( n k nem oszthtó n-nel, így fc g c. Az ötlet z, hogy f c = g c helyett csk zt ellenőrizzük, hogy f c és g c egy lkms h Z n [x] polinomml osztv zonos mrdékot d-e. H h fok (n-hez képest lcsony, kkor ez kivitelezhető ismételt négyzetre emelésekkel. H n prím, kkor bármely h szerinti mrdékik is egyenlőek, zonbn z összetett számok ezt nem teljesítik. A teszt nehézsége megfelelő h polinomot tlálni. Megjegyezzük, hogy ennek módszernek egy továbbfejlesztett változt (2006-os eredmény (log n 6 lépésszámú, mi htodik htvány mitt lényegesen lssbb, mint z előbbi prímtesztek (bár biztosn prímet tlál. Azonbn z lklmzásnál ngy véletlen prímszámot szeretnénk tlálni, mi zt jelenti, hogy prímek számosság mitt átlgosn körülbelül ezer drb 200 300 jegyű számról kell megvizsgálni, hogy prímek-e. Ez Miller Rbin Lenstr teszttel sokkl gyorsbbn elvégezhető, és mivel tévedés vlószínűsége gykorltilg 0, inkább ezt lklmzzák. 21

2. fejezet Prímfktorizációk Az előző fejezetben láttuk, hogy tetszőlegesen ngy prímeket is gyorsn és tévedés nélkül tudunk tlálni. Ezek után szeretnénk tudni, hogy egy ngy tetszőleges összetett szám prímtényezős felbontását milyen módszerekkel tudjuk meghtározni, és ezek milyen htékonyk. 2.1. Tényezőkre bontás osztássl Az első és egyben legtermészetesebb ötlet mit középiskolábn is hsznál z ember prímekkel vló osztások próbálgtás. Ehhez persze, h N számunk, szükségünk vn egy, prímeket N -ig trtlmzó tábláztr, ezek legyenek rendre p 1,... p r. H ez megvn, kkor N -et megpróbáljuk elosztni p i -kkel i = 1, 2,... r-re. H vlmely i-re z osztási mrdék 0, kkor ezt p i -t felírjuk prímosztók közé, és N -et lecseréljük N /p i -re, mjd erre ugynezt z eljárást elvégezzük, persze itt már elég z első p i osztór, és z nnál ngyobbkr ellenőrizni. Ezt ddig csináljuk, míg N -et p i -kkel osztv egy N -nél ngyobb prímet vgy 1-et kpunk. Így megkptuk N prímtényezős felbontását. Az lgoritmus elején egy már megvlósított prímteszttel ellenőrizhetjük, hogy N prím-e, ekkor nem kell megkísérelni felbontást. Ezért továbbikbn mindig feltesszük, hogy N összetett szám. 22

elvetődik egy problém, mégpedig prímeket trtlmzó táblázt elkészítése. Bár egy-egy számról gyorsn el tudjuk dönteni, hogy prím-e, de h veszünk például egy 500-jegyű összetett számot, kkor ennek gyöke kb. 250 jegy körül vn. Elég persze pártln számokt ellenőrizni, zok közül is z 5-tel végződőeket kizárhtjuk, de még így is ngyjából 10 250 drb szám 4 -ét kellene ellenőriznünk, mi időigényes lenne, ezért egy picit módosítjuk 10 z lgoritmust. A tábláztunkbn nemcsk prímek szerepelhetnek, hnem összetett számok is. Például válsszuk 2, 3, 5, 7, 11, 13, 17, 19... számokt, hol z első három tg után felváltv 2-vel, illetve 4-gyel növelünk (ez 2 és 3 többesein kívül minden pártln számot trtlmz. Ekkor következő z lgoritmusunk: Tenyezokre bonts osztssl k := 0, n z dott szm, q := n q 1 n = 1 V Kilep( q := [n/p k ]; r := (n modulo p k r = 0 V n := q, p k primoszto, kiirjuk q > p V k k := k + 1 n prim, Kilep( elmerülhet kérdés, nem okoz-e problémát, hogy tábláztunkbn nem csk prímek szerepelnek, nem lehet-e, hogy z outputbn nemprímek is megjelennek? Azt állítom, hogy nem. 2.1.1. Lemm. Legyen N összetett szám és legyen 2 = p 1, p 2,... p r próbosztók sorozt, mely sorozt N -ig trtlmzz prímeket, és még esetleg összetett számokt. Ekkor fenti lgoritmus nem írht ki z outputr összetett számot. 23

Bizonyítás: Tegyük fel indirekt, hogy z outputbn szerepelt egy h = p 1 p 2... p s összetett szám. Mivel N -ig minden prímet trtlmz tábláztunk, így h prímtényezőit is legfeljebb 1 kivétellel. Az lgoritmus futás során úgy kerülhetett h z outputr, hogy vele osztottunk mrdékosn, és mrdék 0 lett, vgy z lgoritmus végén megmrdt. De mivel tábláztbn növekvő sorrendben vnnk számok, így h prímosztóivl is meg kellett próbálnunk osztni, mire eljutottunk h-ig. Például, h h egy prímtényezője 2 volt, kkor 2-vel már megkíséreltünk osztni, és h h-vl oszthtó N, kkor persze 2-vel is. Az lgoritmus felépítése mitt zonbn 2-vel ddig próbálkozunk, míg z összes 2-es prímtényezőit ki nem osztjuk N -ből, így z már h-vl nem lesz oszthtó. Tehát feltevésünk hibás volt, z lgoritmus csk prímeket ír ki z outputr. Az lgoritmusunk vlóbn meghtározz N prímtényezős felbontását. A próbosztásos módszer tovább jvíthtó, h próbosztások előtt végzünk egy prímtesztet, hiszen h N -nek egy N -nél jóvl ngyobb prímosztój is vn, kkor végigpróbálnánk z összes osztót N -ig, ám h gyorsn ellenőrizzük minden lépésben, hogy mrdék prím-e, kkor nem kell tovább próbálgtni. Már csk z kérdés, hogy milyen gyorsn teszi ezt? Vizsgált: Hány próbosztásr vn szükségünk z lgoritmusbn? Ehhez nem árt tudni, hogy körülbelül hány prímszám vn egy N pozitív egész számig. Legyen π(x z x-ig terjedő prímek szám. Ekkor tnultk lpján x π(x értékét -szel közelíthetjük. ln x Az nyilvánvló, hogy z lgoritmus futni fog, míg p r 1 -et, zz z utolsó előtti prímosztót meg nem tlálj. És ennél jobbt nem is tudunk mondni, hiszen csk szerencsés esetben nem kell sokáig futni. A későbbiekben, z lklmzásnál tipikusn két ngy prím szorztából álló számokkl fogunk fogllkozni, így tehát közel N -ig fog futni. Vegyünk egy 500-jegyű számot. Ekkor ennek gyöke körülbelül 250-jegyű. Hány prím vn eddig? 24

10 250 ln 10 250 = 10250 log 10 10 250 log 10 e 10250 2500 10246 Tehát ebből látjuk, hogy ennek lépésszám reménytelenül sok, ngy számokr nem tudjuk meghtározni emberi időben. 2.2. ermt-módszer A próbosztásos módszernél már előrevetítettük, hogy tipikusn ngy prímtényezekből álló számokt fogunk hsználni gykorltbn. Mielőtt próbosztásnál htékonybb lgoritmusokt vizsgálnánk, előbb közelítsük meg más oldlról problémát. A kis osztók helyett ngyok megkeresésével próbálkozzunk. A módszert ermt hsznált, és következőképpen szól: Legyen N = u v, hol u v, és tegyük fel, hogy N pártln (ekkor u és v is pártln. Legyen Ekkor nyilván x := u+v 2 és y := v u 2. N = x 2 y 2, 0 y < x N. ermt módszere bbn áll, hogy szisztemtikusn keresünk olyn x-et és y-t, melyek kielégítik fenti egyenletet. A módszer egy dott pártln N -hez megkeresi N legngyobb olyn osztóját, mely kisebb vgy egyenlő, mint N. Az lgoritmus z lábbi: 25

Tenyezokre bonts osszedssl es kivonssl N dott szm, t := [ N ] x := 2 t + 1; y := 1; r := t 2 N ; r 0 r > 0 r > 0 r := r y; y := y + 2; r = 0 V Kiir( x y /2 ; Kilep ( r := r + x; x := x + 2; r := r y; y := y + 2; Az lgoritmus futás során kezdetben x = [ N ] és y = 0, mjd 2x + 1, 2y + 1 értékkel kezdjük keresést. Az r z x 2 y 2 N értéknek felel meg, vgyis méri, hogy milyen távol vgyunk N -től. Természetes módon, h r > 0, kkor csk y értéket növeljük, egyébként mindkettőt. A vizsgáltr nem térünk ki részletesen, csk z eredményeket közöljük. Az eddigi jelölések mellett, szükséges lépésszám v [ N ] értékkel rányos, hol v ngyobb prímosztój volt N -nek. H v távol vn N -től, kkor ez ngyon időigényes lehet. 2.3. Szit módszer A következő módszer szintén egy N -hez közeli prímosztót keres, lényegében ermt módszer egy módosított változt. H z előbb látott r-et, mi távolságot mérte, átrendezzük, kpjuk hogy x 2 N = y 2, tehát nem feltétlenül kell megtrtni y-t, elég h x 2 N -ről megvizsgáljuk, hogy z teljes négyzet-e. Hogyn tudjuk ezt eldönteni egy számról? Vegyünk különböző m modulusokt. H egy szám teljes négyzet, kkor minden m-re z m-mel vett mrdékánk ezzel összhngbn kell lennie. Például, h m = 3-t válsztunk, 26

kkor egy szám négyzete modulo 3 csk 0 és 1 mrdékot vehet fel, ugynis egy szám eredetileg 0, 1, 2 mrdékot dht 3-ml osztv, zz 3k, 3k ± 1 lkú lehet, ezeket négyzetre emelve kpjuk, hogy milyen mrdékot dht egy négyzetszám modulo 3. Ugynezt minden m modulusr megvizsgálhtjuk. Mivel N egy dott fix szám, ennek mrdékát bármilyen számml osztv meg tudjuk mondni, így h megvizsgáljuk x mrdékát is, kkor sok számot kizárhtunk. Például, h N 2 (mod 3 és x 0 (mod 3, kkor hogy z előbb láttuk x 2 1 (mod 3, így x 2 N 2 (mod 3 dódik, viszont kkor x 2 N nem lehet teljes négyzet, hiszen csk 0, 1 mrdékot vehet fel egy négyzetszám modulo 3. Tehát x-nek oszthtónk kell lennie 3-ml. Ugynilyen vizsgáltokt minden m modulusr el tudunk végezni, ezzel egy dott N -hez kpunk egy-egy szittábláztot. Válsszunk tehát prímeket, melyek N -hez reltív prímek. Ekkor kíni mrdéktétel szerint sziták egymástól függetlenek lesznek. Sőt, még z is igz, hogy minden szit körülbelül megmrdó értékek felét szűri ki, így h veszünk l drb prímet, kkor 2 l érték közül 1-ről kell megvizsgálni csupán, hogy z teljes négyzet-e. Megjegyezzük, hogy túl sok prímet nem érdemes válsztni, hiszen ekkor szittáblázt elkészítése lenne időigényes. Tehát z lgoritmusunk egy N pártln számhoz meghtározz N legngyobb osztóját, mely kisebb vgy egyenlő, mint N. Vegyünk m 1, m 2,..., m r modulusokt, melyek páronként és N -hez reltív prímek. Elkészítünk r drb S[i, j ] szittábláztot, hol 1 j < r, 0 j m i és S[i, j ] = { 1, h j 2 N y 2 (modulo m i megoldhtó ; 0, egyébként. H kis prímeket válsztunk modulusoknk, kkor ezek megoldhtósági feltételek kár kézzel is ellenőrizhetőek, de sokkl egyszerűbb egy tétel felhsználásávl kiszámítni szittábláztot: 2.3.1. Tétel. Tegyük fel, hogy p pártln prím és (, p = 1, hol Z. Ekkor z x 2 (mod p kongruenci megoldhtó p 1 2 1 (mod p teljesül, és megoldásszám 2. 27

Tehát, h j 2 N nem oszthtó m i -vel, kkor csk (j 2 N m i 1 2 kifejezést kell kiszámolni modulo m i, mi már ismert ismételt négyzetre emelések módszerével gyorsn számíthtó. Tehát ez lpján el tudjuk készíteni z S[i, j ] szittábláztokt, melyek lpján z lgoritmus z lábbi: Tenyezokre bonts szitlssl x := [ N ] + 1; k i := ( x mod m i i re mohto := true 1 = 2 i = 1 to r S[i, k i ] = 1 V mohto := flse; brek; mohto = true V y := [ x 2 N ] vgy y := [ x 2 N ] + 1 y 2 = x 2 N V x y keresett oszto; Kilep( x := x + 1; k i := (k i 1 mod m i i re 2.4. Tényezőkre bontás Monte Crlo módszerrel Most térjünk vissz z eredeti problémánkr, mely prímtényezők meghtározás volt. Az ötletünk mivel 2.1-ben láttuk, hogy minden prímet végigpróbálni N -ig reménytelenül sokáig trt z, hogy ne próbálgssunk ki minden prímet, hnem vlmilyen véletlen módon lépkedjünk prímek között. Látni fogjuk mjd, hogy zért mégsem véletlen lépkedünk, már csk zért sem, mert nem tudunk mi npig sem tökéletes véletlen- 28

szám generátort készíteni. Először zonbn megoldunk két feldtot. 1.feldt: Adott x 1, x 2, x 3... egész számok sorozt, úgy, hogy 0 x n < m minden n-re teljesül. Legyen f (x egy egészértékű függvény, mely [0, m-ből [0, m-be képez. A soroztunkt, vlmilyen kezdőérték mellett, z x n+1 = f (x n szbály szerint képezzük. Mutssuk meg, hogy sorozt vlhonnn kezdve periodikus, bbn z értelemben, hogy léteznek µ és λ számok, melyekre x 0, x 1,..., x µ,..., x µ+λ 1 mind különböző, de x n+λ = x n h n µ. Megoldás: Tegyük fel, hogy sorozt nem periodikus és x 0 = vlmely [0, m-re. Mivel f függvény, ezért egyértelmű hozzárendelés, tehát kezdőérték mellett minden további x i egyértelműen meg vn htározv. Legyen b = x 1 = f (x 0. Ekkor h f (b = lenne, kkor zonnl periodikus lenne sorozt, hiszen ezután -ból ismét b-be kellene menni f egyértelműsége mitt. Tehát sorozt minden új tgjánál f -nek egy ddig még nem szerepelt értéket kell felvennie. De mivel f egész értékű és [0, m-be képez, ezért csk véges sok értéket vehet fel, tehát előbb-utóbb szükségképpen egy már szerepelt számhoz jut sorozt. Innentől pedig periodikus lesz sorozt f egyértelműsége mitt, hiszen ugynúgy kell képződnie soroztelemeknek, mint korábbn. Tehát tegyük fel, hogy z x n = k értéket másodjár vesz fel sorozt. A k érték első soroztbeli előfordulásánk indexe jó lesz µ-nek, n µ pedig jó lesz λ-nk. Ezen értékekre teljesül megkívánt periodicitás. 2.feldt: Legyen l(n legngyobb, n-nél nem ngyobb kettőhtvány. Az előző feldt jelölései mellett bizonyítsuk be, hogy létezik n > 0, melyre x n = x l(n 1. Megoldás: Indirekt tegyük fel, hogy minden n-re x n x l(n 1. Tekintsünk µ + λ-nál ngyobb indexeket, és egy periódus hossz legyen l. Az l(n 1 számok rendre 2 s 1-gyel egyenlőek, s = 0, 1, 2,.... Vegyünk olyn ngy s-et, hogy 2 s 1 és 2 s+1 1 indexek között lévő távolság 2l-nél ngyobb legyen. Ekkor 2 s 1 és 2 s+1 1 között lévő soroztelemek leglább egy egész 29

periódust trtlmznk. A feltevésünk erre z s-re is igz, zz x 2 s 1 x i, hol i = 2 s, 2 s + 1,..., 2 s+1 2. Ám ezen i-k között biztosn vn egy egész periódusnyi soroztérték, hiszen olyn ngyr válsztottuk s-et, hogy biztosn beleessen. Mivel még s > µ+λ, ezért sorozt csk perióduson belül előforduló értékeket vehet fel, tehát x 2 s 1 értéke is csk egy perióduson belül előforduló érték lehet. Ekkor viszont vlmely i-re x 2 s 1 = x i kell legyen, mi ellentmond feltevésünknek, ezzel beláttuk z állítást. Legyen most f (x egy egész együtthtós polinom, és tekintsük z lábbi két soroztot: x 0 = y 0 = A, x m+1 = f (x m (mod N, y m+1 = f (y m (mod p, hol p z N egyik prímosztój. Ekkor y m = x m modulo p teljesül minden m 1-re. Ekkor feldtok feltételei nyilván teljesülnek z y m soroztr, így 2. feldt lpján létezik m 1, melyre y m = y l(m 1. Így h tekintjük z x m x l(m 1 kifejezést, kkor z oszthtó lesz p-vel. Megmutthtó z is, hogy h f (y (mod p úgy viselkedik, mint [0, p 1] hlmzt önmgáb képező véletlen leképezés, kkor z ilyen m várhtó értéke p ngyságrendű. Hogyn lesz ebből prímfktorizáció? H N különböző prímosztói különböző m értékeknek felelnek meg, és hogy zt már említettük, tipikusn ez lesz helyzet, kkor úgy kphtjuk meg ezeket z osztókt, hogy m = 1, 2, 3... -r kiszámítjuk lnko(x m x l(m 1, N -et. Addig csináljuk ezt, míg felbonttln rész prím nem lesz. elmerül kérdés, hogy milyen f polinomot válsszunk, hogy z elég véletlen legyen? Beláthtó, hogy h f elsőfokú, z nem lesz elég véletlen. És sjnos nem is tudjuk, hogy milyet lenne érdemes válsztni, következő mit természetes módon kipróbálunk másodfokúk közül legegyszerűbb, z f (x = x 2 + 1. H ezzel próbálkozunk, zt tpsztljuk, hogy ez polinom jónk tűnik, ám nem tudjuk, hogy nincs-e ennél jobb. Ezek után lássuk mgát z lgoritmust, mely egy N számnk meghtározz prímtényezőit, zobn elképzelhető, hogy csődöt mond (z 1. feldtbn látott 30

periodicitás mitt végtelen ciklusb esik, legngyobb közös osztónk felbonttln rész dódn, ekkor megáll progrm: Tenyezokre bonts Monte Crlo modszerrel x := 5; y := 2; k, l := 1; n z dott szm n 1 MRL(n V Kiir(n; brek; g := lnko(x y, n; g = n V Az lgoritmus csodot mond; Brek; g = 1 V k := k 1; k = 0 V y := x; l := 2 l; k := l; x := (x 2 + 1 mod n; Continue(; Kiir(g; n := n/g; x := x mod n; y := y mod n; Az MRL(n kifejezés zt jelöli, hogy futttjuk Miller Rbin Lenstr tesztet N -re, hiszen h N prím, kkor nincs mit fktorizálni. Megjegyezzük továbbá, hogy mielőtt struktogrmm végén kiírjuk g-t mint prímtényezőt, ellenőrizni kell, hogy g tényleg prím-e, hiszen lehet, hogy nem z. H összetett, kkor például futtthtjuk rá z első próbosztásos módszert, h viszont túl ngy szám g, kkor vlószínűleg nem sikerül ezzel z lgoritmussl meghtározni felbontást. A Monte Crlo módszer tipikusn ngyobb prímtényezők elfogásár lklms, gykorltbn érdemes egy drbig futttni próbosztásos módszert, 31

mjd áttérni erre. Ezt igzolják z lábbi digrmok is, melyek megvlósított progrm futási eredményeit fogllják össze. A tesztelést 4 ktegóriábn végeztem el: 1. 2001-től 3999-ig pártln számok, 1000 drb 2. 2000001-től 2099999-ig pártln számok, 50000 drb 3. 2000000001-től 2000099999-ig pártln számok, 50000 drb 4. 2 10 13 + 1-től 2 10 13 + 999-ig pártln számok, 500 drb A páros számokkl nem érdemes fogllkozni, progrm elején jánlott kiosztni kettes szorzókt, h vnnk. Minden ktegóriábn megvizsgáltm, hogy hány esetben mond csődöt felbontás és hány esetben ír ki összetett számot z outputr. Továbbá, nemcsk z x 2 + 1 polinomot vizsgáltm, hnem x 2 +c -t is, hol c = 1, 2,... 9, mivel nem tudni, hogy nincs-e jobb c = 1 esetnél. Az lábbi eredményeket kptm: Az x-tengelyen c konstnsok vnnk, z y-tengelyen felvett értékek z egyes ktegóriákr. 32

33

Vizsgáljuk meg először, hogy hány esetben ír ki progrm összetett számot. Láthtón jelentős eltérés nincs z egyes konstnsok között, így mind négy ktegóriábn körülbelüli értékkel számolok. Ezek osztv drbszámml rendre 350/1000, 18000/50000, 18000/50000, 180/500. Láthtón z rányok nem sokt változnk konstnsok és felbontndó számok ngyságánk változásávl, így zt lehet mondni, hogy körülbelül 36 százlékbn írn ki z outputr összetett számot, tehát vlóbn indokolt ezekre is futttni egy prímtesztet és megkísérelni felbontni őket. Nézzük most, hogy hány esetben mond csődöt z lgoritmus. H ismét z rányokt tekintjük, kkor már eltérő értékeket kpunk. Az ezres ngyságrendben 15/1000 körülbelül ez z érték. H viszont 10 6 és 10 9 ngyságrendet nézzük kkor jelentős különbség, hiszen z elsőben körülbelül 155/50000 kudrc esélye, ezzel szemben vlmivel ngyobb számoknál már csk 40/50000. Sőt, h megvizsgáljuk legngyobb ktegóriát, ott zt látjuk, hogy 500 számból gykorltilg mindnél meg tudtuk htározni felbontást. Ez is jól muttj, hogy Monte Crlo módszer tipikusn ngyobb számoknál eredményesebb. Most hsonlítsuk össze különböző polinomok áltl elért eredményt egy digrmbn: 34

Azt vesszük észre, hogy c = 7, 8 esetben csőd rány minden ktegóriábn leglcsonybbk közt vn, míg többi c-re csk 1 1 jó eredmény vn (például c = 1, 2. H 7-re és 8-r megnézzük, hogy hány esetben írtk ki összetett számot z outputr, kkor zt tpsztljuk, hogy c = 8-r ez szinte mindig leglcsonybb érték. Ebből úgy tűnik, hogy z x 2 + 8 polinom egy jó válsztásnk tűnik, ezért megmértem futásidőket z egyes konstnsokr. Ebből z dódott, hogy c = 8-cl futttv semmivel sem lssbb felbontás. A 10 6 ngyságrendnél második leggyorsbb volt 9, 23 másodperccel (9, 17 mögött, mely c = 9 esetben dódott, sőt 10 13 ngyságrendben 3, 67 másodperc futásidővel ez szerepelt legjobbn, és másik két ktegóriábn sem volt szignifikánsn lssbb többinél. Ezen eredmények lpján z x 2 + 8 polinomot jánlnám Monte Crlo felbontáshoz, hiszen sebesség, összetett számok rány, és csődök rány szempontjából is előkelő helyen végzett (zonbn megjegyzem, hogy ngyságrendbeli különbségek nincsenek, szimptotikusn egyformán jónk tűnnek z egyes polinomok. Vizsgáltm még más ngyobb c értékeket is, például 50, 51, 100, 101 stb. de ezek láthtón rosszbb eredményt dtk. Az összetett számok rány 40 százlék körül volt és többször mondott csődöt progrm. Ezután mivel nem tudjuk milyen polinom lenne megfelelő próbálkoztm mgsbb fokú polinomokkl, de x 2 + x + c-vel is. Ezekre sem kptm semmilyen bizttó eredményt, sőt néhol meglepően rosszt. Úgy tűnik, vlóbn z x 2 + c lkú polinomokkl érdemes próbálkozni, leglábbis nem tláltm jobbt náluk. Pollrd belátt, hogy módszer p t 1 lépésszámú, hol p t 1 második legngyobb prímosztój N -nek, zonbn gykorlti eredmények lpján futásidő áltlábn jóvl N 1 4 lá esik. 35

3. fejezet Alklmzás 3.1. RSA-kódolás Ahogy zt z előző fejezetben láttuk, gyors prímfktorizációs eljárást mi npig nem tláltunk. Erre hiányosságr épít z RSA titkosítás. Az RSA egy nyilvános kulcsú titkosírás, mely következőt jelenti: Adott 3 személy, legyenek ők A,B és C. A és B kommunikálni szeretnének egymássl, de úgy, hogy z egymásnk küldött üzeneteket C ne tudj elolvsni, h z üzenetnek birtokáb jut. Adott tehát egy x üzenet, egy f nyilvános kulcs, és kell egy g titkos kulcs mindkét szereplőnek. A titkosítás zt hsználj ki, hogy egy művelet inverzét nehéz kiszámolni, tehát g titkos kulcs f inverze lesz. Az esetünkben nehéz művelet fktorizálás lesz. Az x üzenetre A lklmzz z ő titkos kulcsát, mjd erre B nyilvános kulcsát, zz kiszámítj g B (f A (x-et, és ezt küldi el B-nek. Ezt z üzenetet B úgy tudj elolvsni, h ugynúgy, mint A lklmzz kpott üzenetre sját titkos kulcsát, mjd erre A nyilvános kulcsát, ugynis f A (g B (f B (g A (x = f A (g A (x = x. 36

Ekkor C nem tudj elolvsni z üzenetet g B függvény hiányábn, sőt hmis üzenetet sem tud küldeni, hiszen kódoláshoz szükséges g A -t sem ismeri. Hogy néz ez ki pontosn z RSA-kódolásnál? Vegyünk két ngy véletlenül válsztott prímszámot. Ilyeneket például Miller Rbin Lenstr prímteszttel kereshetünk, úgy, hogy véletlen pártln számokt próbálgtunk. A prímek számosság és teszt lépésszám mitt gyorsn jutunk prímekhez. Legyen két prím p és q, ezeket titokbn trtj tuljdonos. Kiszámítjuk n = pq-t, mi nyilvánosságr hozhtó. Mivel tuljdonos ismeri p-t és q- t, ezért könnyen kiszámíthtj ϕ(n-et. Ezután keres egy e számot melyre (e, ϕ(n = 1. Ekkor z ő f nyilvános kulcs f (y = y e legkisebb mrdék modulo n lesz. Ekkor g függvényt könnyen meghtározhtjuk, h hsonló lkbn keressük, hiszen mivel ezek egymás inverzei, ezért egymás után lklmzv őket egy y-r visszkpjuk y-t, másrészt h g(y = y s, kkor g(f (y = y es, vgyis minden y-r teljesülnie kell y se = y (mod N kongruenciánk. A kis ermt tétel egy módosított változtából tudjuk, hogy minden y-r y p y (mod p. Ugynez q-r is fennáll. Ezekből dódik, hogy minden y-r y tϕ(n+1 y (mod n, így csupán z se = 1 + tϕ(n diofntikus egyenletet kell megoldnunk s-re és t-re. Ez z euklideszi lgoritmus segítségével gyorsn megoldhtó, így megkptuk g titkos kulcsunkt. Azonbn ezt más nem tudj megoldni, hiszen ϕ(n értékére szüksége lenne számításhoz, ehhez viszont n prímtényezőit lenne kénytelen meghtározni. Tehát kódolás feltöréséhez tudni kellene C -nek gyorsn prímfktorizálni, mi viszont jelenleg megoldtln problém. Miután A és B is meghtározt sját nyilvános és titkos kulcsát, kkor úgy tudnk egymássl beszélgetni, hogy betűknek és írásjeleknek megfeleltetnek számokt, ennek megfelelően z elküldeni kívánt szövegből egy számot 37

készítenek. Ezeket blokkokr osztják csupán kényelmi szempontból és fent ismertetett f és g függvényeket lklmzv minden blokkr elküldik egymásnk kpott számokt. Ezt dekódolv visszkpják z eredeti szövegből készült számot, mit egyszerűen visszfejtenek. A gykorltbn tipikusn ngy prímeket kell keresni, hogy működjön kódolás, hiszen kis számokt tudunk fktorizálni. Arr is vigyázni kell, hogy ne egymáshoz közeli számokt válsszunk, hiszen ekkor 2. fejezetben ismertetett ermt módszer, vgy szitmódszer lklmzásávl hmr megtlálnánk prímtényezőket, hiszen ekkor szám gyöke közel lenne prímekhez, viszont túl messzire sem érdemes menni gyöktől, hiszen ekkor Monte Crlo módszer megtlálná kicsi prímtényezőt gyorsn. Arr is vigyázni kell, hogy ϕ(n-hez válsztott e számot ne válsszuk kicsinek, ugynis ekkor is létezik htékony támdás kódolás ellen. Tehát egy 200-jegyű és 300-jegyű véletlen prímszám válsztásávl nyugodtk lehetünk dtink biztonság felől. 38

Irodlomjegyzék [1] D. E. Knuth: A számítógép progrmozás művészete II [2] reud Róbert, Gyrmti Edit: Számelmélet 39