1. Számelmélet Definíció: Az a egész szám osztója a egész számnak, ha létezik olyan c egész szám, melyre = ac. Ezt a következőképpen jelöljük: a Tulajdonságok: Minden egész szám osztója önmagának, azaz a a minden egész a-ra. A 0-nak minden egész szám az osztója (még a 0 is!!!) Ha a és a, akkor a = vagy a =. ha a és c, akkor a c ha a és a c, akkor tetszőleges x és y egész számokra a x + yc. Definíció: A p > 1 egész számot prímszámnak nevezzük, ha pontosan kettő dara pozitív osztója van; az 1 és önmaga. Ha egy pozitív számnak kettőnél tö pozitív osztója van, akkor azt összetett számnak nevezzük. Tétel: A prímszámok halmaza végtelen. Számelmélet alaptétele: Minden 1-nél nagyo pozitív egész a sorrendtől eltekintve egyértelműen írható fel prímszámok pozitív egész kitevős hatványaként. Ez az adott szám prímtényezős felontása. Például 120 = 2 3 3 5. Definíció: Az a és számok legnagyo közös osztójának nevezzük a legnagyo olyan d számot, melyre d a és d. A legnagyo közös osztót lnko(a, )-vel jelüljük. Például lnko(33, 21) = 3, lnko(40, 0) = 40. Hogyan lehetne kiszámítani két szám legnagyo közös osztóját algoritmikusan? Mivel egy szám prímtényezős felontását megtalálni általáan nehéz (az RSA kódolás is ezen alapszik!), így a legnagyo közös osztó kiszámítására a középiskoláan tanult- prímtényezős felontáson alapuló- módszer nem ad hatékony algoritmust. Maradékos osztás tétele: Tetszőleges a és 0 számokhoz egyértelműen léteznek olyan p és q számok, melyekre a = p +q, ahol 0 q <. Ilyenkor azt mondjuk, hogy megvan a-an p-szer és marad q. 1
Például 30 = 7 4 + 2, azaz 30-an a 4 megvan 7-szer és marad a 2. Tétel: Legyenek a és pozitív számok. Osszuk el a-t -vel maradékosan, azaz legyen a = p + q, ahol 0 q <. Ekkor lnko(a, ) = lnko(, q). A tétel segítségével két számolhatjuk két szém legnagyo közös osztóját: Euklideszi-algoritmus: legyen a > 0 és 0 1. Ha = 0, akkor lnko(a, ) = a; 2. Ha 0 akkor osszuk el a-t maradékosan -vel: a = p + q, ahol 0 q <. a helyée írjuk e -t, helyée pedig q-t; ezzel az új (a, ) párral ugorjunk az 1. pontra! Pl. lnko(20, 6) = lnko(6, 2) = lnko(2, 0) = 2. Tétel: Legyenek a és pozitív számok. Osszuk el a-t -vel maradékosan, azaz legyen a = p + q, ahol 0 q <. Tegyük fel, hogy valamely x és y egész számokra lnko(a, ) = x + y q. Legyen x = y és y = x p y. Ekkor lnko(a, ) = x a + y. A tétel segítségével nem csak ki tudjuk számítani két pozitív egész legnagyo közös osztóját, hanem megadhatunk olyan x, y egészeket is, melyre lnko(a, ) = x a+y. Ez a módosított Euklideszi-algoritmus, melynek működését egy példán keresztül mutatjuk e. Példa: Adjunk meg olyan x, y egészeket, melyekre 62x+14y = lnko(62; 14). A módosított Euklideszi-algoritmus: a a lnko(a,) x y 62 14 4 2-2 9 14 6 2 2 1-2 6 2 3 2 0 1 2 0 2 1 0 Az algoritmus először a sima Euklideszi-algoritmussal kiszámítja a és legnagyo közös osztóját. A harmadik oszlopan lévő szám azt mondja meg, hogy hányszor van meg a-an. Amikor = 0, akkor lnko(a, ) = a. Mivel a és legnagyo közös osztója minden soran ugyanannyi, ezért a 4. oszlopan végig ugyanaz a szám fog szerepelni. 2
Ezt követően nézzük a tálázat utolsó(!) sorát. Olyan x-t és y-t szeretnénk találni, melyre lnko(a, ) = xa + y, azaz 2 = 2 x + 0 y. Mivel az utolsó soran a értéke mindig(!) 0, ezért az x = 1 és y = 0 választás mindig megfelelő lesz. Ezután az előző tétel szerint alulról felfelé haladva, minden soran kiszámíthatjuk az x és y értékét az alái módon: ha egy soran, mondjuk az i. soran már ismerjük az x, illetve y értékét, akkor az eggyel felette lévő soran, azaz az (i 1). soran legyen x = y és y = x p y, ahol p az (i 1). soran lévő a értékkel egyezik meg. Ezt felhasználva a tálázat 4. soráan lévő x és y értékekre azt kapjuk, hogy x = 0, illetve y = 1 3 0 = 1. (Leellenőrizhetjük, hogy az így kapott x és y értékekkel een a soran is fennáll az lnko(a, ) = xa + y összefüggés: 2 = 6 0 + 2 1 valóan igaz.) Ezt követően határozzuk meg a harmadik soran lévő x és y értékeket: x = 1, illetve y = 0 2 1 = 2. (Ekkor een a soran is teljesül, hogy lnko(a, ) = xa + y, hiszen 2 = 14 1 + 6 ( 2).) Végezetül határozzuk meg a 2. soran x és y értékét: x = 2, illetve y = 1 4 ( 2) = 9. Az algoritmus ezzel véget ért. Az algoritmus tehát kiszámította, hogy a 62- nek és 14-nek a legnagyo közös osztója a 2, másrészt a legnagyo közös osztót, azaz a 2-őt előállította 2 = 62 ( 2) + 14 9 alakan. Tekintsük most a 12x + 21y = 100 egyenletet, és keressük ennek olyan megoldását melyen x és y is egész. Vegyük észre, hogy lnko(12; 21) = 3 ezért ármennyi is az x, illetve y értéke, az egyenlet al oldala osztható lesz 3- mal. A jo oldal viszont nem osztható 3-mal, így az egyenletnek nem létezik megoldása az egész számok köréen. Próáljuk most a 12x+21y = 90 egyenlet egy egész megoldását megkeresni. A módosított Euklideszi algoritmussal elő tudunk állítani olyan x 0 és y 0 egész számokat, melyekre 12x 0 + 21y 0 = lnko(12; 21) = 3. Mivel most az lnko(12; 21) = 3 osztója a jo oldalnak, azaz a 90-nek, ezért az előző egyenlet mindkét oldalát 90/3 = 30 -cal szorozva azt kapjuk, hogy 12 (30x 0 ) + 21 (30y 0 ) = 90, azaz az x = 30x 0 és y = 30y 0 megoldása lesz az eredeti feladatnak. A megoldás során használt észrevételeinket általánosan is megfogalmazhatjuk. Tétel: Legyenek a, pozitív egészek c pedig egész szám. Az ax + y = c egyenletnek akkor és csak akkor létezik egész x, y megoldása, ha lnko(a, ) c. Példa. a, Oldjuk meg az egészek köréen a 121x + 33y = 77 egyenletet! Alkalmazzuk a módosított Euklideszi-algoritmust a (121,33) párra. 3
a a lnko(a,) x y 121 33 3 11-1 4 33 22 1 11 1-1 22 11 2 11 0 1 11 0 11 1 0 Azt kaptuk tehát, hogy lnko(121; 33) = 11. Mivel 11 77, ezért az egyenletnek van megoldása. Másrészt a módosított Euklideszi-algoritmus azt adta, hogy lnko(121; 33) = 11 = 121 ( 1) + 33 4, amiől (mindkét oldalt 7- tel szorozva) azt kapjuk, hogy 77 = 121 ( 7) + 33 28. Ezek alapján a 121x + 33y = 77 egyenlet egy egész megoldása az x = 7, y = 28., Oldjuk meg az egészek köréen a 165x + 45y = 400 egyenletet! Futtassuk a módosított Euklideszi-algoritmust a (165;45) párra! a a lnko(a,) 165 45 4 15 45 30 1 15 30 15 2 15 15 0 15 Az algoritmus futása során azt kapjuk, hogy lnko(165; 45) = 15. Azonan a 15 nem osztója a 400-nak, ezért az egyenletnek nincs megoldása, így a módosított Euklideszi-algoritmust nem is kell tová folytatni. 1.1. Kongruenciák Definíció. Legyenek a és egész számok, m pedig egy nem nulla egész szám. Azt mondjuk, hogy a és kongruensek modulo m, ha m a. Jelölése: a mod (m). Példa. A definíció szerint például 11 31 mod (5), hiszen az 5 osztója a 11 31 = 20-nak. Egyszerűen meggondolható, hogy a és pontosan akkor lesz kongruens modulo m, ha a és ugyanolyan maradékot adnak m-mel osztva. 4
Tétel. 1. a a mod (m) minden egész a és nem nulla m egész számra. 2. Ha a mod (m), akkor a mod (m) 3. Ha a mod (m) és c mod (m), akkor a c mod (m) 4. Ha a mod (m) és c d mod (m), akkor a + c + d mod (m) 5. Ha a mod (m) és c d mod (m), akkor a c d mod (m) 6. Ha a mod (m), akkor minden pozitív egész n-re a n n mod (m). Gyakorlásképpen most eizonyítjuk a Tétel 4. pontját (a töi állítás hasonlóan látható e). Azt szeretnénk tehát elátni, hogy ha a mod (m) és c d mod (m), akkor a + c + d mod (m). Tegyük fel tehát, hogy a mod (m) és c d mod (m); ez a definíció alapján azt jelenti, hogy m a és m c d. Felhasználva, hogy (a + c) ( + d) = a + c d = (a )+(c d), továá azt, hogy a feltevésünk szerint a oszható m-mel, és d is osztható m -mel, azt kapjuk, hogy (a + c) ( + d) is osztható m-mel. Ez viszont pontosan azt jelenti, hogy a+c +d mod (m), és éppen ezt akartuk izonyítani. Feladat. Adjunk meg olyan x egész számot, melyre 33x 1 mod (211). Megoldás. A definíció szerint olyan x számot keresünk, melyre 211 33x 1. Az oszthatóság definíciója alapján ez azt jelenti, hogy létezik olyan y egész szám, melyre 211y = 33x 1. Az egyenletet átrendezve azt kapjuk, hogy az 1 = 33x 211y diofantikus egyenletet kell megoldanunk, ami az y = y jelöléssel 1 = 33x + 211y alakan írható fel. Futtassuk le a módosított Euklideszi-algoritmust a (33; 211) párra! a a lnko(a,) x y 33 211 0 1 32-5 211 33 6 1-5 32 33 13 2 1 2-5 13 7 1 11-1 2 7 6 1 1 1-1 6 1 6 1 0 1 1 0 1 1 0 5
A módosított Euklideszi-algoritmus tehát azt adta, hogy 1 = lnko(33; 211) = 33 32 + 211 ( 5) amiől x = 32 adódik (y = 5, y = y = 5). Tehát a 33x 1 mod (211) kongruenciának egy megoldása az x = 32. Vegyük észre, hogy ha a 32-höz hozzáadjuk a modulust, azaz a 211-et, akkor szintén egy megoldását kapjuk kongruenciának, hiszen 33 (32 + 211) = 33 32 + 33 211, s mivel az összeg második tagja (33 211)osztható 211-gyel, ezért 33 (32 + 211) ugyanolyan maradékot fog adni 211-gyel osztva, mint 33 32. Teljesen hasonlóan elátható, hogy tetszőleges A egész esetén, az x = 32 + 211 A megoldása lesz a kongruenciának! 1.1.1. Moduláris hatványozás Feladat Adottak az a, és c pozitív egész számok. Számítsuk ki, hogy a-nak a. hatványa milyen maradékot ad c-vel osztva! Természetesen megpróálhatjuk azt, hogy az a számot megszorozzuk önmagával -szer (a = a a... a, ahol dara a szerepel a szorzatan), majd megnézzük, hogy az így kapott szám milyen maradékot ad c-vel osztva. Ezzel az eljárással két proléma is van. Egyrészt, ha a nagy (például tö ezer jegyű), akkor,,rengeteg szorzást kell elvégeznünk, vagyis az eljárás lassú lesz. Másrészt nagy a, illetve esetén az a hatvány eredménye is túl nagy lenne. A titkosításan használt RSA-kód esetén mind a titkosításnál, mind a titkosított üzenet visszafejtésénél ezt a feladatot kell akár tö ezer jegyű a, és c esetén gyorsan megoldanunk, ezért a feladat általános megoldására más, hatékony algoritmust kell keresnünk. Az algoritmus működéset egy kis példán mutatjuk e. Számítsuk ki, hogy milyen maradékot ad 605130-nak a 16. hatványa 2017-tel osztva! Az eljárás ötlete azon a tételen alapszik, hogy ha a mod (m), akkor minden pozitív egész n-re a n n mod (m). Nézzük, hogyan lehetne ezt hasznosítani a feladat megoldásához! Először is nézzük meg, hogy milyen maradékot ad 2017-tel osztva 605130. Azt kapjuk, hogy az osztási mardék 30, azaz 605130 30 mod (2017). Ekkor a tétel szerint 605130 16 30 16 mod (2017), azaz a feladat megoldásához elegendő kiszámítanunk, hogy milyen maradékot ad 2017-tel osztva 30 16. Emeljük először négyzetre a 30-at, és nézzük meg, hogy milyen maradékot 6
ad 2017-tel osztva! 30 2 900 mod (2017) Ezután ismét felhasználva a tételt azt kapjuk, hogy 30 4 = (30 2 ) 2 900 2 1183 mod (2017) Ismét a tételt felhasználva kapjuk, hogy Majd végezetül Így tehát azt kaptuk, hogy 30 8 = (30 4 ) 2 1183 2 1708 mod (2017) 30 16 = (30 8 ) 2 1708 2 682 mod (2017) 605130 16 30 16 682 mod (2017) azaz 605130-nak a 16. hatványa 682 maradékot ad 2017-tel osztva. Az eljárás lényege tehát az, hogy először is megnézzük, hogy az a szám (esetünken a 605130) milyen r maradékot ad c-vel (2017)-tel osztva, és ennek az r maradéknak számítjuk ki a. hatványának az osztási maradékát c-vel osztva. Ezt pedig ismételt négyzetreemeléssel tesszük meg: négyzetre emeljük r-et, és egyől megnézzük, hogy az így kapott szám milyen r 1 maradékot ad c-vel osztva. Ezután négyzetre emeljük r 1 -et, és megnézzük, hogy az így kapott szám milyen r 2 maradékot ad c-vel osztva, majd ezt az eljárást folytatjuk tová. Ezt az eljárást hívják moduláris hatványozásnak. 7