diszkr et matematika 9. el}oad as - ms.sapientia.romgyongyi/diszkretmat/9_szamelmelet.pdf · diszkr...
TRANSCRIPT
Diszkret matematika9. eloadas
MARTON [email protected]
Sapientia Egyetem,Matematika-Informatika TanszekMarosvasarhely, Romania
2018, oszi felev
MARTON Gyongyver 2018, Diszkret matematika
Mirol volt szo az elmult eloadason?
a base64 kodolasi technika
Szamelmelet
prımszamok, alapfogalmakprımtesztelo algoritmusokkongruenciak
MARTON Gyongyver 2018, Diszkret matematika
Mirol lesz szo?
a prımszamtetel
prımszamok, tulajdonsagok, sejtesek
maradekosztalyok, maradekrendszerek
modularis hatvanyozas
a kis Fermat-tetel
a kis-Fermat tetelen alapulo prımteszt
az Euler fuggveny, az Euler-tetel
az Euler fuggvenyhez kapcsolodo osszefuggesek
a Miller-Rabin prımteszt
hatvanyok es generator elemek
MARTON Gyongyver 2018, Diszkret matematika
A prımszamtetel
1. ertelmezesπ(x) az x-nel nem nagyobb prımszamok szamat jeloli, ahol x egy pozitıv valosszam.
Peldaul: π(10) = 4, π(100) = 25.
A prımszamtetel a prımszamok eloszlasat ırja le, amelyet Gauss adott meg,1793-ban, mint sejtest, bizonyıtani Hadamard bizonyıtotta be 1896-ban:
π(x) ∼ xln(x)
, ahol ln(x) a termeszetes logaritmusfuggveny.
Tetel formajaban:
1. tetel
limx→∞
π(x)x
ln(x)= 1
MARTON Gyongyver 2018, Diszkret matematika
A prımszamtetel
Nagyobb x ertekekre a kovetkezo megkozelıtesek pontosabbak:
π(x) ∼ xln(x)−1
,
π(x) ∼ xln(x)−1− 1
ln(x)
.
1. feladat
A megadott kepletek segıtsegevel ırjunk Python fuggvenyt, amely megadja aprımszamok szamat x-ig.
import eload8, math
def primszT (x):
L = eload8.eratL(x)
k = len(L) #x-ig a primszamok szama
lg = math.log(x)
return k, x / lg, x / (lg - 1), x / (lg-1-1/lg)
>>> primszT(100)
(25, 21.71472409516259, 27.73794157864211, 29.515738713193304)
MARTON Gyongyver 2018, Diszkret matematika
A prımszamtetel
A prımszamtetel alapjan allıthato, hogy az x-ik prımszam megkozelıtoleg:
x · ln(x),
vagy pontosabban
x · (ln(x) + ln(ln(x)− 1)).
Tulajdonsagok, sejtesek:
Ikerprımek: Azok a (p, p + 2) szamparok, ahol p prımszam es p + 2 isprımszam. Peldaul: (3, 5), (5, 7), (11, 13).
Ikerprım-sejtes: Vegtelen sok ikerprım letezik.
Goldbach-sejtes:
Minden 2-nel nagyobb paros szam felırhato ket prımszamosszegekent.Minden 5-nel nagyobb paratlan szam felırhato harom prımszamosszegekent.
Wilson tetel: Egy p szam akkor es csakis akkor prımszam, ha(p − 1)! = 1 · 2 . . . (p − 2) · (p − 1), p-vel valo osztasi maradeka p − 1.
MARTON Gyongyver 2018, Diszkret matematika
Maradekosztalyok, maradekrendszerek
a (mod m) szerinti osztasi maradekok alapjan a szamokat kulonbozohalmazokba csoportosıthatjuk ⇒ (mod m) szerinti maradekosztalyok
(mod 5) szerint ot maradekosztalyt kulonboztetunk meg:
· · · ≡ −10 ≡ −5 ≡ 0 ≡ 5 ≡ 10 ≡ . . . (mod 5)· · · ≡ −9 ≡ −4 ≡ 1 ≡ 6 ≡ 11 ≡ . . . (mod 5)· · · ≡ −8 ≡ −3 ≡ 2 ≡ 7 ≡ 12 ≡ . . . (mod 5)· · · ≡ −7 ≡ −2 ≡ 3 ≡ 8 ≡ 13 ≡ . . . (mod 5)· · · ≡ −6 ≡ −1 ≡ 4 ≡ 9 ≡ 14 ≡ . . . (mod 5)
a-nak (mod m) szerint a legkisebb nem negatıv osztasi maradeka r , hafennall: a = q ·m + r , ahol 0 ≤ r ≤ m − 1
teljes maradekrendszer: az a1, a2, . . . , am szamok teljes maradekrendszertalkotnak m szerint, ha paronkent inkongruensek (mod m) szerint
0, 1, 2, ...,m − 1 teljes maradekrendszert alkotnak (mod m) szerint,
0, 1, 2, 3, 4 teljes maradekrendszert alkotnak (mod 5) szerint
MARTON Gyongyver 2018, Diszkret matematika
Maradekosztalyok, maradekrendszerek
redukalt maradekrendszer: a teljes maradekrendszer azon ai elemeiamelyekre fennall: lnko(ai ,m) = 1.
Peldak
(mod 6) szerint 1, 5 redukalt maradekrendszert alkotnak,
(mod 6) szerint 0, 1, 2, 3, 4, 5 teljes maradekrendszert alkotnak,
MARTON Gyongyver 2018, Diszkret matematika
A kis Fermat-tetel
legjelentosebb szamelmeleti eredmeny
nem ugyanaz, mint a nagy Fermat-tetel (xn + yn = zn)
2. tetelHa m egy prımszam es x egy pozitıv egesz szam, ugy hogy 1 ≤ x ≤ m − 1,akkor
xm−1 ≡ 1 (mod m).
Pelda: legyen m = 11, x = 3, ekkor fennall: 310 = 59049 ≡ 1 (mod 11)
masfelol felırhatok a kovetkezok:
1 · x = 1 · 3 ≡ 3 (mod 11) 6 · x = 6 · 3 ≡ 7 (mod 11)2 · x = 2 · 3 ≡ 6 (mod 11) 7 · x = 7 · 3 ≡ 10 (mod 11)3 · x = 3 · 3 ≡ 9 (mod 11) 8 · x = 8 · 3 ≡ 2 (mod 11)4 · x = 4 · 3 ≡ 1 (mod 11) 9 · x = 9 · 3 ≡ 5 (mod 11)5 · x = 5 · 3 ≡ 4 (mod 11) 10 · x = 10 · 3 ≡ 8 (mod 11)
a fentiek alapjan hogyan bizonyıtjuk a tetelt?
MARTON Gyongyver 2018, Diszkret matematika
A kis Fermat-tetel
Ha egy m szamra nem teljesul a fenti feltetel, akkor az egyertelmuenosszetett szam.
Ha egy m szamra teljesul a fenti feltetel, akkor az nem egyertelmuenprımszam: vannak olyan osszetett szamok amelyekre letezik olyan xszam, hogy 1 ≤ x ≤ m − 1 es xm−1 ≡ 1 (mod m), ezeket a szamokat xalapu Fermat-fele alprımeknek hıvjuk.
Pl. 2-es alapu Fermat-fele alprım: 341, mert 2340 ≡ 1 (mod 341),ugyanakkor 341 = 11 · 31.
Carmichael-szamok: olyan osszetett szamok amelyek eseteben, mindenx-re, ahol lnko(x ,m) = 1 es 1 ≤ x ≤ m − 1 fennall xm−1 ≡ 1 (mod m).
A Fermat-tetel a Carmichael szamok miatt nem alkalmazhatoprımszam-tesztelo algoritmusban.
A legkisebb Carmichael-szam: 561 = 3 · 11 · 17.
A Carmichael-szamok szama vegtelen.
A kis-Fermat tetel az elso kiindulasi pont a veletlenszuen mukodoprımtesztelo algoritmusokhoz.
MARTON Gyongyver 2018, Diszkret matematika
A kis-Fermat tetelen alapulo prımteszt
2. feladat
Irjunk Python fuggvenyt, amely a kis-Fermat tetel alapjan vegzi a prımtesztelest.
Az algoritmus bemenete m, egy paratlan szam es egy t biztonsagi parameter. At ertekeben azt adjuk meg, hogy hany x szamot generaljon veletlenszeruen azalgoritmus. A kimenet True ha az m szam prımszam, figyelembe veve a tbiztonsagi parametert, vagy False, ha a szam osszetett.
A gcd legnagyobb kozos osztot, a pow modularis hatvanyerteket szamol,beepıtett fuggvenyek.
from random import randint
from math import gcd
def fermatT(m, t):
for i in range(0, t):
x = randint(2, m - 1)
if gcd(x, m) != 1: return False
y = pow(x, m - 1, m)
if y != 1: return False
return True
MARTON Gyongyver 2018, Diszkret matematika
A kis-Fermat tetelen alapulo prımteszt
Mi lesz az eredmenye a kovetkezo fuggvenyhıvasoknak?
>>> fermatT(561, 20)
>>> fermatT(1615681, 20)
>>> fermatT(1909001, 20)
>>> fermatT(2508013, 10)
>>> fermatT(935794081, 20)
>>> fermatT(2489462641, 20)
Milyen szamok 561, 1615681, 1909001, 2508013, . . . ? ⇒ Charmichael szamok
561 = 3 · 11 · 171615681 = 23 · 199 · 3531909001 = 41 · 101 · 461
MARTON Gyongyver 2018, Diszkret matematika
Modularis hatvanyozas
Hatarozzuk meg 343 (mod 100) erteket: mindenegyes negyzetre emeles utanmeghatarozzuk az osztasi maradekot es ezzel az ertekkel dolgozunk tovabb.
3 ≡ 3 (mod 100)32 ≡ 9 (mod 100)34 ≡ 81 (mod 100)38 ≡ 61 (mod 100)
316 ≡ 21 (mod 100)332 ≡ 41 (mod 100)
343 = 332 · 38 · 32 · 31 = 41 · 61 · 9 · 3 = 27 (mod 100)
MARTON Gyongyver 2018, Diszkret matematika
Modularis hatvanyozas
3. feladat
Hatarozzuk meg xn (mod m) erteket.
def modpow (x, n, m):
res = 1
while n != 0:
if n % 2 == 1: res = (res * x) % m
x = (x * x ) % m
n = n // 2
return res
MARTON Gyongyver 2018, Diszkret matematika
Az Euler-tetel, az Euler-fuggveny
a Fermat-tetel altalanosıtasa,
a Fermat-tetel: adott hatvanyertek viselkedeserol ad informaciot egy prımmodulus szerint.
az Euler-tetel: adott hatvanyertek viselkedeserol ad informaciot egytetszoleges modulus szerint.
2. ertelmezesLegyen n pozitıv egesz szam, ekkor az Euler-fuggveny meghatarozza azokat apozitıv egesz szamokat, amelyek nem nagyobbak mint n es relatıv prımek n-nel.φ(n)-nel jeloljuk.
Pelda az Euler-fuggveny ertekeire, ha 1 ≤ n ≤ 12:
n 1 2 3 4 5 6 7 8 9 10 11 12
φ(n) 1 1 2 2 4 2 6 4 6 4 10 4
MARTON Gyongyver 2018, Diszkret matematika
Az Euler-tetel, az Euler-fuggveny
3. tetelHa x ,m pozitıv egesz szamok, amelyekre lnko(x ,m) = 1, akkor:
xφ(m) ≡ 1 (mod m).
Pelda: legyen m = 12, x = 5, ekkor fennall φ(12) = 4 es:
5φ(12) = 54 = 625 ≡ 1 (mod 12)
masfelol a 12-nel kisebb es 12-vel relatıv prımszamok a kovetkezoek: 1, 5,7, 11
felırhatok a kovetkezok:
1 · a = 1 · 5 ≡ 5 (mod 12)5 · a = 5 · 5 ≡ 1 (mod 12)7 · a = 7 · 5 ≡ 11 (mod 12)11 · a = 11 · 5 ≡ 7 (mod 12)
a fentiek alapjan hogyan bizonyıtjuk a tetelt?
MARTON Gyongyver 2018, Diszkret matematika
Az Euler fuggvenyhez kapcsolodo osszefuggesek
4. tetelHa p egy prımszam, akkor φ(p) = p − 1. A tetel fordıtottja is igaz, azaz, ha pegy pozitıv egesz szam, amelyre fennall, hogy φ(p) = p − 1, akkor p prımszam.
Peldaul: φ(61) = 60.
5. tetel
Ha p egy prımszam es a egy pozitıv egesz szam, akkor φ(pa) = pa − pa−1.
Peldaul: φ(256) = φ(28) = 28 − 27 = 128.
6. tetelHa a es b ket, egymassal relatıv prımszam, akkor φ(a · b) = φ(a) · φ(b).
Peldaul: φ(75) = φ(3 · 25) = φ(3) · φ(25) = 2 · (52 − 5) = 40.
MARTON Gyongyver 2018, Diszkret matematika
Az Euler fuggvenyhez kapcsolodo osszefuggesek
7. tetelHa x prımtenyezos felbontasa: x = pa1
1 · pa22 · ... · p
ann , akkor
φ(x) = x ·(
1− 1
p1
)·(
1− 1
p2
)· · · · ·
(1− 1
pn
)Kiindulopont a bizonyıtashoz, ha φ(x)− t felırjuk a kovetkezokeppen:
φ(x) = (pa11 − pa1−1
1 ) · (pa22 − pa2−1
2 ) . . . (pann − pan−1
n ).
Peldak:
φ(60) = (22 − 21) · (3− 1) · (5− 1) = 16, mert 60 = 22 · 3 · 5
φ(100) = 100 ·(
1− 1
2
)·(
1− 1
5
)= 40, mert 100 = 22 · 52
MARTON Gyongyver 2018, Diszkret matematika
A Miller-Rabin valoszınusegi prımteszt
az algoritmus biztosan megallapıtja a bemenetrol, hogy osszetett szam,azonban azt a megallapıtast, hogy prımszam csak nagy valoszınuseggelallıtja
a gyakorlatban nagy szamok, legalabb 300 szamjegyu szamokvizsgalatanal hasznaljak, miutan megallapıtottak, hogy a bemenetneknincsenek kis prımosztoi
az algoritmus a kovetkezo tetelen alapszik:
8. tetelHa az m prımszam, akkor minden olyan x szam eseteben, ahol lnko(x , m) = 1,es m − 1 = 2s r , ahol r paratlan szam, fennall a kovetkezo ket osszefugges(kriterium) kozul valamelyik
x r ≡ 1 (mod m),
∃j , 0 ≤ j ≤ s − 1 : x2j r ≡ m − 1 (mod m).
MARTON Gyongyver 2018, Diszkret matematika
A Miller-Rabin valoszınusegi prımteszt
A bizonyıtas vazlata:
a kis Fermat tetel alapjan fennall, ha m prımszam: xm−1 ≡ 1 (mod m),
fenn all az is, hogy a szamsorozat minden eleme (kezdve a masodikelemtol) egyenlo az elozo szam negyzetevel
x r , x2·r = (x r )2, x22·r = (x2·r )2, . . . x2s−1·r , x2s ·r = (x2s−1·r )2
ket eset lehetseges:
a lista elso eleme kongruens 1 modulo m, vagya lista elso elemei nem lesznek kongruensek 1 modulo m-el, de egyadott elemtol kezdodoen azonban a listaelemek kongruensek lesznek1 modulo m-el. Ez azt jelenti, hogy van egy olyan b szam a listabanamelyre fenn all:
b 6≡ 1 (mod m) es b2 ≡ 1 (mod m).
Ez a helyzet azonban csak ugy allhat elo ha b ≡ (m − 1) ≡ −1 (mod m)
MARTON Gyongyver 2018, Diszkret matematika
A Miller-Rabin valoszınusegi prımteszt
Megallapıthato, hogy:
a tetel fordıtottja nem igaz, azaz ha fennall a ket kriterium kozulvalamelyik abbol nem kovetkezik az hogy a szam prım, mert vannak olyanm osszetett szamok, melyekre ∃ x : 1 ≤ x ≤ m − 1, melyre fennall a fentiket osszefugges kozul valamelyik.
az m osszetett szam eseteben maximum φ(m)/4 az ilyen x szamok szama.
ha t = 10 veletlenszeruen generalt x szamra fennall a kriterium, akkor azm nagyon nagy valoszınuseggel prımszam.
a Miller-Rabin valoszınusegi prımteszt eseteben a bemenet az m ≥ 3paratlan szam es t ≥ 1 biztonsagi parameter. A kimenet True, ha az mszam prımszam figyelembe veve a t biztonsagi parametert; es False, haosszetett.
MARTON Gyongyver 2018, Diszkret matematika
A Miller-Rabin valoszınusegi prımteszt
Pelda: legyen m = 61, t = 4, m − 1 = 22 · 15
x j Magyarazat
3 0 315 ≡ 60 (mod 61)
7 0 715 ≡ 11 (mod 61)
1 72·15 ≡ 60 (mod 61)
42 0 4215 ≡ 1 (mod 61)
24 0 2415 ≡ 11 (mod 61)
1 242·15 ≡ 60 (mod 61)→ nagyon nagy valoszınuseggel prım
Megjegyzes: mind a negy veletlenszeruen valasztott x szam eseteben fennall akriterium, tehat megallapıthato hogy a szam nagy valoszınuseggel prım
MARTON Gyongyver 2018, Diszkret matematika
A Miller-Rabin valoszınusegi prımteszt
Legyen m = 91, t = 4, m − 1 = 90 = 2 · 45
x j Magyarazat
16 0 1645 ≡ 1 (mod 91)→ valoszınuleg prım
75 0 7545 ≡ 90 (mod 91)→ valoszınuleg prım
13 0 1345 ≡ 13 (mod 61)→ biztosan osszetett
Megjegyzes: nem kell t = 4 tesztet elvegezni, mert a harmadik x ertekeseteben nem all fenn egyik kriterium sem, tehat megallapıthato, hogy a szambiztosan osszetett.
MARTON Gyongyver 2018, Diszkret matematika
A Miller-Rabin valoszınusegi prımteszt
4. feladat
Irjunk Python fuggvenyt, amely a 7. tetel alapjan vegzi a prımtesztelest. A bemenetm, egy paratlan szam es egy t biztonsagi parameter. A kimenet True ha az m szamprımszam, figyelembe veve a t biztonsagi parametert, vagy False, ha a szam osszetett.
from random import randint
def miller_rabinT(m, t):
s, r = 0, m - 1
while r % 2 == 0:
s, r = s + 1, r // 2
for i in range (0, t):
x = randint(2, m - 1)
y = pow(x, r, m)
if y == 1 or y == (m - 1): continue
for j in range (1, s):
y = (y * y) % m
if y == 1: return False
if y == m - 1: break
if y != (m - 1): return False
return True
MARTON Gyongyver 2018, Diszkret matematika
A Miller-Rabin valoszınusegi prımteszt
Mi lesz az eredmenye a kovetkezo fuggvenyhıvasoknak?
>>> miller_rabinT(561, 20)
>>> miller_rabinT(1615681, 20)
>>> miller_rabinT(1909001, 20)
>>> miller_rabinT(2508013, 10)
>>> miller_rabinT(935794081, 20)
>>> miller_rabinT(2489462641, 20)
>>> miller_rabinT(12071477104822861216808586387918950333768935055030
80579133487559657569734020218239985458507248481664131696189240753969
6923442785951409526750132260151918419, 20)
>>> miller_rabinT(12071477104822861216808586387918950333768935055030
80579133487559657569734020218239985458507248481664131696189240753969
6923442785951409526750132260151918463, 20)
MARTON Gyongyver 2018, Diszkret matematika
A Miller-Rabin valoszınusegi prımteszt
5. feladat
A Miller-Rabin valoszınusegi prımteszt segıtsegevel generaljunk egy k bitesprımszamot, ahol k ≥ 128 bit.
import random
def primeGen(k, t):
nr = random.getrandbits(k)
if not (nr & 1): nr += 1
while True:
if miller_rabinT(nr, t): break
nr += 2
return nr
>>> primeGen(256, 20)
88725395404043359043589...111217400738357967924821159093157
MARTON Gyongyver 2018, Diszkret matematika
A Miller-Rabin valoszınusegi prımteszt
6. feladat
A Miller-Rabin valoszınusegi prımteszt segıtsegevel generalt szamot alakıtsuk 256-osszamrendszerbe, a kapott bajtszekvenciat pedig base64 formaban ırjuk ki egyallomanyba.
def primToB64(k, fname = ’primeB64.txt’):
nr = primeGen(k, 20)
m_str = nrToBytes(nr)
b64str = base64.b64encode(m_str)
out = open(fname, ’wt’)
out.write(b64str.decode())
out.close()
return nr
>>> primToB64(512)
>>> primToB64(1024, ’prime.txt’)
def nrToBytes(nr):
L = []
while nr != 0:
L = [nr & 255] + L
nr = nr >> 8
print(L)
return bytes(L)
MARTON Gyongyver 2018, Diszkret matematika
A Miller-Rabin valoszınusegi prımteszt
7. feladat
A fileba kiırt primszam base64-es alakjat olvassuk ki es alakıtsuk vissza szamma.
def primFromB64(fname = ’primeB64.txt’):
inf = open(fname, ’rt’)
m_str = inf.read()
inf.close()
b64str = base64.b64decode(m_str.encode())
nr = nrFrom256(b64str)
return nr
>>> primFromB64()
>>> primFromB64(’prime.txt’)
def nrFrom256(L):
nr = 0
for elem in L:
nr = (nr << 8) + elem
return nr
MARTON Gyongyver 2018, Diszkret matematika
Hatvanyok es generator elemek
a kis Fermat, illetve Euler tetel mellett, szamos egyeb tulajdonsagfigyelheto meg az xn (mod m) ertekek meghatarozasakor
Hatarozzuk meg xn (mod 11), ertekeit x = 2, 3, . . . 10-re illetven = 1, 2, . . . 10-re:
21 = 2 31 = 3 41 = 4 51 = 5 61 = 6 71 = 7 81 = 8 91 = 9 101 = 10
22 = 4 32 = 9 42 = 5 52 = 3 62 = 3 72 = 5 82 = 9 92 = 4 102 = 1
23 = 8 33 = 5 43 = 9 53 = 4 63 = 7 73 = 2 83 = 6 93 = 3 103 = 10
24 = 5 34 = 4 44 = 3 54 = 9 64 = 9 74 = 3 84 = 4 94 = 5 104 = 1
25 = 10 35 = 1 45 = 1 55 = 1 65 = 10 75 = 10 85 = 10 95 = 1 105 = 10
26 = 9 36 = 3 46 = 4 56 = 5 66 = 5 76 = 4 86 = 3 96 = 9 106 = 1
27 = 7 37 = 9 47 = 5 57 = 3 67 = 8 77 = 6 87 = 2 97 = 4 107 = 10
28 = 3 38 = 5 48 = 9 58 = 4 68 = 4 78 = 9 88 = 5 98 = 3 108 = 1
29 = 6 39 = 4 49 = 3 59 = 9 69 = 2 79 = 8 89 = 7 99 = 5 109 = 10
210 = 1 310 = 1 410 = 1 510 = 1 610 = 1 710 = 1 810 = 1 910 = 1 1010 = 1
MARTON Gyongyver 2018, Diszkret matematika
Hatvanyok es generator elemek
kis Fermat tetel, kimondja, hogy ha p prım es lnko(x , p) = 1, akkorxp−1 = 1 (mod p).
a fenti tablazat alapjan kijelenthetjuk, hogy lesznek olyan x szamok, aholx-nek kisebb hatvanyertekei is kongruensek lesznek 1-el.
x rend-jen, (mod p) szerint, azt a legkisebb k kitevot ertjuk, amelyrefennall: xk ≡ 1 (mod p). Pl. (mod 11) szerint a 2-es szam rendje 10, a3 szam rendje 5, mıg a 10-es szam rendje 2.
ha p egy prımszam, akkor mindig letezik gen ∈ {1, 2, . . . , p − 1},amelynek hatvanyertekei (mod p) szerint eloallıtjak az {1, 2, . . . , p − 1}halmaz elemeit egy tetszoleges sorrendbe.
ezeket a gen elemeket primitıv gyokoknek, vagy generatorelemeknek hıvjuk.ezek azok az elemek lesznek, amelyeknek rendje p − 1.a generator elemek szama: φ(p − 1).a fenti tablazatban 2, 6, 7, 8 generator elemek, szamuk φ(10) = 4.
MARTON Gyongyver 2018, Diszkret matematika