• Nie Znaleziono Wyników

krypt06.pdf ,

N/A
N/A
Protected

Academic year: 2021

Share "krypt06.pdf ,"

Copied!
145
0
0

Pełen tekst

(1)

Kryptografia

z elementami kryptografii kwantowej

Ryszard Tanaś

http://zon8.physd.amu.edu.pl/~tanas Wykład 6

(2)

Spis treści

10 Trochę matematyki 4

10.1 Podzielność liczb . . . 4

10.2 Twierdzenie o rozkładzie na czynniki pierwsze . . . . 6

10.3 Własności relacji podzielności . . . 7

10.4 Największy wspólny dzielnik — N W D(a, b) . . . . . 8

10.5 Najmniejsza wspólna wielokrotność — N W W (a, b) 9 10.6 Liczby względnie pierwsze . . . 10

10.7 Algorytm Euklidesa . . . 11

10.8 Twierdzenie o superpozycji . . . 13

10.9 Rozszerzony algorytm Euklidesa . . . 15

10.10 Kongruencje . . . 17

10.11 Twierdzenie o odwrotności . . . 20

(3)

10.13 Chińskie twierdzenie o resztach . . . 22 10.14 Funkcja Eulera . . . 25 10.15 Twierdzenie Eulera . . . 25 10.16 Potęgowanie modulo metodą iterowanego

podnosze-nia do kwadratu . . . 26 10.17 Czy wystarczy liczb pierwszych? . . . 29 10.18 Testy pierwszości . . . 29

(4)

10 Trochę matematyki

10.1 Podzielność liczb

• Zbiór liczb całkowitych zwykle oznaczamy

Z = {. . . , −3, −2, −1, 0, 1, 2, 3, . . . } • a zbiór liczb naturalnych

N = {0, 1, 2, 3, . . . }

• Dla danych liczb całkowitych a i b mówimy, że liczba b jest podzielna przez a lub, że liczba a dzieli liczbę b, jeżeli istnieje taka liczba całkowita d, że b = ad. Liczbę a nazywamy

(5)

10 Trochę matematyki

10.1 Podzielność liczb

• Zbiór liczb całkowitych zwykle oznaczamy

Z = {. . . , −3, −2, −1, 0, 1, 2, 3, . . . }

• a zbiór liczb naturalnych

N = {0, 1, 2, 3, . . . }

• Dla danych liczb całkowitych a i b mówimy, że liczba b jest podzielna przez a lub, że liczba a dzieli liczbę b, jeżeli istnieje taka liczba całkowita d, że b = ad. Liczbę a nazywamy

(6)

10 Trochę matematyki

10.1 Podzielność liczb

• Zbiór liczb całkowitych zwykle oznaczamy

Z = {. . . , −3, −2, −1, 0, 1, 2, 3, . . . } • a zbiór liczb naturalnych

N = {0, 1, 2, 3, . . . }

• Dla danych liczb całkowitych a i b mówimy, że liczba b jest podzielna przez a lub, że liczba a dzieli liczbę b, jeżeli istnieje taka liczba całkowita d, że b = ad. Liczbę a nazywamy

(7)

10 Trochę matematyki

10.1 Podzielność liczb

• Zbiór liczb całkowitych zwykle oznaczamy

Z = {. . . , −3, −2, −1, 0, 1, 2, 3, . . . } • a zbiór liczb naturalnych

N = {0, 1, 2, 3, . . . }

• Dla danych liczb całkowitych a i b mówimy, że liczba b jest podzielna przez a lub, że liczba a dzieli liczbę b, jeżeli istnieje taka liczba całkowita d, że b = ad. Liczbę a nazywamy

(8)

• Każda liczba b > 1 ma co najmniej dwa dzielniki dodatnie: 1 i b.

• Dzielnikiem nietrywialnym liczby b nazywamy dzielnik dodatni różny od 1 i b.

• Liczba pierwsza to liczba większa od 1 nie mająca innych dzielników dodatnich niż 1 i ona sama.

• Liczba mająca co najmniej jeden nietrywialny dzielnik jest liczbą złożoną.

(9)

• Każda liczba b > 1 ma co najmniej dwa dzielniki dodatnie: 1 i

b.

• Dzielnikiem nietrywialnym liczby b nazywamy dzielnik dodatni różny od 1 i b.

• Liczba pierwsza to liczba większa od 1 nie mająca innych dzielników dodatnich niż 1 i ona sama.

• Liczba mająca co najmniej jeden nietrywialny dzielnik jest liczbą złożoną.

(10)

• Każda liczba b > 1 ma co najmniej dwa dzielniki dodatnie: 1 i

b.

• Dzielnikiem nietrywialnym liczby b nazywamy dzielnik dodatni różny od 1 i b.

• Liczba pierwsza to liczba większa od 1 nie mająca innych dzielników dodatnich niż 1 i ona sama.

• Liczba mająca co najmniej jeden nietrywialny dzielnik jest liczbą złożoną.

(11)

• Każda liczba b > 1 ma co najmniej dwa dzielniki dodatnie: 1 i

b.

• Dzielnikiem nietrywialnym liczby b nazywamy dzielnik dodatni różny od 1 i b.

• Liczba pierwsza to liczba większa od 1 nie mająca innych dzielników dodatnich niż 1 i ona sama.

• Liczba mająca co najmniej jeden nietrywialny dzielnik jest liczbą złożoną.

(12)

10.2 Twierdzenie o rozkładzie na czynniki pierwsze

Każda liczba naturalna n może być przedstawiona jednoznacznie (z dokładnością do kolejności czynników) jako iloczyn liczb

(13)

10.2 Twierdzenie o rozkładzie na czynniki pierwsze

Każda liczba naturalna n może być przedstawiona jednoznacznie (z dokładnością do kolejności czynników) jako iloczyn liczb

pierwszych.

Zwykle taki rozkład zapisujemy jako iloczyn odpowiednich potęg różnych liczb pierwszych, np.

(14)

10.3 Własności relacji podzielności

• Jeśli a|b i c jest dowolną liczbą całkowitą, to a|bc. • Jeśli a|b i b|c, to a|c

• Jeśli a|b i a|c, to a|b ± c

• Jeśli liczba pierwsza p dzieli ab, to p|a lub p|b

• Jeśli m|a i n|a oraz m i n nie mają wspólnych dzielników większych od 1, to mn|a

(15)

10.3 Własności relacji podzielności

• Jeśli a|b i c jest dowolną liczbą całkowitą, to a|bc. • Jeśli a|b i b|c, to a|c

• Jeśli a|b i a|c, to a|b ± c

• Jeśli liczba pierwsza p dzieli ab, to p|a lub p|b

• Jeśli m|a i n|a oraz m i n nie mają wspólnych dzielników większych od 1, to mn|a

(16)

10.3 Własności relacji podzielności

• Jeśli a|b i c jest dowolną liczbą całkowitą, to a|bc. • Jeśli a|b i b|c, to a|c

• Jeśli a|b i a|c, to a|b ± c

• Jeśli liczba pierwsza p dzieli ab, to p|a lub p|b

• Jeśli m|a i n|a oraz m i n nie mają wspólnych dzielników większych od 1, to mn|a

(17)

10.3 Własności relacji podzielności

• Jeśli a|b i c jest dowolną liczbą całkowitą, to a|bc. • Jeśli a|b i b|c, to a|c

• Jeśli a|b i a|c, to a|b ± c

• Jeśli liczba pierwsza p dzieli ab, to p|a lub p|b

• Jeśli m|a i n|a oraz m i n nie mają wspólnych dzielników większych od 1, to mn|a

(18)

10.3 Własności relacji podzielności

• Jeśli a|b i c jest dowolną liczbą całkowitą, to a|bc. • Jeśli a|b i b|c, to a|c

• Jeśli a|b i a|c, to a|b ± c

• Jeśli liczba pierwsza p dzieli ab, to p|a lub p|b

• Jeśli m|a i n|a oraz m i n nie mają wspólnych dzielników większych od 1, to mn|a

(19)

10.3 Własności relacji podzielności

• Jeśli a|b i c jest dowolną liczbą całkowitą, to a|bc. • Jeśli a|b i b|c, to a|c

• Jeśli a|b i a|c, to a|b ± c

• Jeśli liczba pierwsza p dzieli ab, to p|a lub p|b

• Jeśli m|a i n|a oraz m i n nie mają wspólnych dzielników większych od 1, to mn|a

(20)

10.4 Największy wspólny dzielnik — N W D(a, b)

Największy wspólny dzielnik, N W D(a, b), dla danych dwóch liczb całkowitych (nie będących jednocześnie zerami), to

największa liczba całkowita d będąca dzielnikiem zarówno a, jak i b.

Przykład:

(21)

10.4 Największy wspólny dzielnik — N W D(a, b)

Największy wspólny dzielnik, N W D(a, b), dla danych dwóch liczb całkowitych (nie będących jednocześnie zerami), to

największa liczba całkowita d będąca dzielnikiem zarówno a, jak i b.

Przykład:

(22)

10.4 Największy wspólny dzielnik — N W D(a, b)

Największy wspólny dzielnik, N W D(a, b), dla danych dwóch liczb całkowitych (nie będących jednocześnie zerami), to

największa liczba całkowita d będąca dzielnikiem zarówno a, jak i b.

Przykład:

(23)

10.5 Najmniejsza wspólna wielokrotność — N W W (a, b) Najmniejsza wspólna wielokrotność, N W W (a, b), to

najmniejsza dodatnia liczba całkowita, którą dzielą a i b.

N W W (a, b) = a · b/N W D(a, b)

Przykład:

(24)

10.5 Najmniejsza wspólna wielokrotność — N W W (a, b) Najmniejsza wspólna wielokrotność, N W W (a, b), to

najmniejsza dodatnia liczba całkowita, którą dzielą a i b. N W W (a, b) = a · b/N W D(a, b)

Przykład:

(25)

10.5 Najmniejsza wspólna wielokrotność — N W W (a, b) Najmniejsza wspólna wielokrotność, N W W (a, b), to

najmniejsza dodatnia liczba całkowita, którą dzielą a i b.

N W W (a, b) = a · b/N W D(a, b)

Przykład:

(26)

10.6 Liczby względnie pierwsze

Liczby a i b są względnie pierwsze jeżeli N W D(a, b) = 1, tzn. liczby a i b nie mają wspólnego dzielnika większego od 1.

Przykład:

N W D(841, 160) = 1

(27)

10.6 Liczby względnie pierwsze

Liczby a i b są względnie pierwsze jeżeli N W D(a, b) = 1, tzn. liczby a i b nie mają wspólnego dzielnika większego od 1.

Przykład:

N W D(841, 160) = 1

(28)

10.6 Liczby względnie pierwsze

Liczby a i b są względnie pierwsze jeżeli N W D(a, b) = 1, tzn. liczby a i b nie mają wspólnego dzielnika większego od 1.

Przykład:

N W D(841, 160) = 1 zatem liczby 841 i 160 są względnie pierwsze

(29)

10.7 Algorytm Euklidesa

• Dla a > b, dzielimy a przez b otrzymując iloraz q1 i resztę r1, tzn.

a = q1b + r1,

• w następnym kroku b gra rolę a, zaś r1 gra rolę b:

b = q2r1 + r2.

• Postępowanie to kontynuujemy dzieląc kolejne reszty,

ri−2 = qiri−1 + ri,

aż do momentu kiedy otrzymamy resztę, która dzieli poprzednią resztę.

(30)

10.7 Algorytm Euklidesa

• Dla a > b, dzielimy a przez b otrzymując iloraz q1 i resztę r1, tzn.

a = q1b + r1,

• w następnym kroku b gra rolę a, zaś r1 gra rolę b:

b = q2r1 + r2.

• Postępowanie to kontynuujemy dzieląc kolejne reszty,

ri−2 = qiri−1 + ri,

aż do momentu kiedy otrzymamy resztę, która dzieli poprzednią resztę.

(31)

10.7 Algorytm Euklidesa

• Dla a > b, dzielimy a przez b otrzymując iloraz q1 i resztę r1, tzn.

a = q1b + r1,

• w następnym kroku b gra rolę a, zaś r1 gra rolę b: b = q2r1 + r2.

• Postępowanie to kontynuujemy dzieląc kolejne reszty,

ri−2 = qiri−1 + ri,

aż do momentu kiedy otrzymamy resztę, która dzieli poprzednią resztę.

(32)

10.7 Algorytm Euklidesa

• Dla a > b, dzielimy a przez b otrzymując iloraz q1 i resztę r1, tzn.

a = q1b + r1,

• w następnym kroku b gra rolę a, zaś r1 gra rolę b:

b = q2r1 + r2.

• Postępowanie to kontynuujemy dzieląc kolejne reszty, ri−2 = qiri−1 + ri,

aż do momentu kiedy otrzymamy resztę, która dzieli poprzednią resztę.

(33)

10.7 Algorytm Euklidesa

• Dla a > b, dzielimy a przez b otrzymując iloraz q1 i resztę r1, tzn.

a = q1b + r1,

• w następnym kroku b gra rolę a, zaś r1 gra rolę b:

b = q2r1 + r2.

• Postępowanie to kontynuujemy dzieląc kolejne reszty,

ri−2 = qiri−1 + ri,

aż do momentu kiedy otrzymamy resztę, która dzieli poprzednią resztę.

(34)

Przykład:

(35)

Przykład:

Obliczmy N W D(841, 160)

a q b r

(36)

Przykład:

Obliczmy N W D(841, 160)

a q b r

841 = 5 · 160 + 41

(37)

Przykład: Obliczmy N W D(841, 160) a q b r 841 = 5 · 160 + 41 160 = 3 · 41 + 37 41 = 1 · 37 + 4

(38)

Przykład: Obliczmy N W D(841, 160) a q b r 841 = 5 · 160 + 41 160 = 3 · 41 + 37 41 = 1 · 37 + 4 37 = 9 · 4 + 1

(39)

Przykład: Obliczmy N W D(841, 160) a q b r 841 = 5 · 160 + 41 160 = 3 · 41 + 37 41 = 1 · 37 + 4 37 = 9 · 4 + 1 4 = 4 · 1 + 0

(40)

Przykład: Obliczmy N W D(841, 160) a q b r 841 = 5 · 160 + 41 160 = 3 · 41 + 37 41 = 1 · 37 + 4 37 = 9 · 4 + 1 4 = 4 · 1 + 0

Ponieważ N W D(841, 160) = 1, to liczby 841 i 160 są względnie pierwsze.

(41)

Przykład: Obliczmy N W D(841, 160) a q b r 841 = 5 · 160 + 41 160 = 3 · 41 + 37 41 = 1 · 37 + 4 37 = 9 · 4 + 1 4 = 4 · 1 + 0

Ponieważ N W D(841, 160) = 1, to liczby 841 i 160 są względnie pierwsze.

Algorytm Euklidesa pozwala znaleźć N W D(a, b) w czasie wielomianowym (dla a > b, O(ln2(a)))

(42)

10.8 Twierdzenie o superpozycji

Największy wspólny dzielnik dwóch liczb może być przedstawiony w postaci kombinacji liniowej tych liczb ze współczynnikami

całkowitymi:

N W D(a, b) = xa + yb

(43)

W poprzednim przykładzie N W D(841, 160) = 1. Korzystając z ciągu równości w algorytmie Euklidesa (idąc w przeciwną stronę) otrzymujemy

(44)

W poprzednim przykładzie N W D(841, 160) = 1. Korzystając z ciągu równości w algorytmie Euklidesa (idąc w przeciwną stronę) otrzymujemy

(45)

W poprzednim przykładzie N W D(841, 160) = 1. Korzystając z ciągu równości w algorytmie Euklidesa (idąc w przeciwną stronę) otrzymujemy

(46)

W poprzednim przykładzie N W D(841, 160) = 1. Korzystając z ciągu równości w algorytmie Euklidesa (idąc w przeciwną stronę) otrzymujemy

1 = 37 − 9 · 4 = 37 − 9(41 − 1 · 37) = 10 · 37 − 9 · 41

(47)

W poprzednim przykładzie N W D(841, 160) = 1. Korzystając z ciągu równości w algorytmie Euklidesa (idąc w przeciwną stronę) otrzymujemy

1 = 37 − 9 · 4 = 37 − 9(41 − 1 · 37)

(48)

W poprzednim przykładzie N W D(841, 160) = 1. Korzystając z ciągu równości w algorytmie Euklidesa (idąc w przeciwną stronę) otrzymujemy

1 = 37 − 9 · 4 = 37 − 9(41 − 1 · 37)

= 10 · 37 − 9 · 41 = 10(160 − 3 · 41) − 9 · 41 = 10 · 160 − 39 · 41

(49)

W poprzednim przykładzie N W D(841, 160) = 1. Korzystając z ciągu równości w algorytmie Euklidesa (idąc w przeciwną stronę) otrzymujemy

1 = 37 − 9 · 4 = 37 − 9(41 − 1 · 37)

= 10 · 37 − 9 · 41 = 10(160 − 3 · 41) − 9 · 41

(50)

W poprzednim przykładzie N W D(841, 160) = 1. Korzystając z ciągu równości w algorytmie Euklidesa (idąc w przeciwną stronę) otrzymujemy

1 = 37 − 9 · 4 = 37 − 9(41 − 1 · 37)

= 10 · 37 − 9 · 41 = 10(160 − 3 · 41) − 9 · 41

= 10 · 160 − 39 · 41 = 10 · 160 − 39 · (841 − 5 · 160) = −39 · 841 + 205 · 160

(51)

W poprzednim przykładzie N W D(841, 160) = 1. Korzystając z ciągu równości w algorytmie Euklidesa (idąc w przeciwną stronę) otrzymujemy 1 = 37 − 9 · 4 = 37 − 9(41 − 1 · 37) = 10 · 37 − 9 · 41 = 10(160 − 3 · 41) − 9 · 41 = 10 · 160 − 39 · 41 = 10 · 160 − 39 · (841 − 5 · 160) = −39 · 841 + 205 · 160 Zatem: x = −39, y = 205

(52)

10.9 Rozszerzony algorytm Euklidesa

Rozszerzony algorytm Euklidesa znajduje zarówno największy

wspólny dzielnik N W D(a, b) liczb a i b jak i liczby x i y będące współczynnikami kombinacji liniowej

(53)

Przyporządkowania w algorytmie:

q = ba/bc, r ← a − qb, a ← b, b ← r,

x ← x2 − qx1, x2 ← x1, x1 ← x,

(54)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1

(55)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5

(56)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41

(57)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160

(58)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41

(59)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1

(60)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0

(61)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1

(62)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5

(63)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1

(64)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5

(65)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3

(66)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3 37

(67)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3 37 41

(68)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3 37 41 37

(69)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3 37 41 37 −3

(70)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3 37 41 37 −3 1

(71)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3 37 41 37 −3 1 −3

(72)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3 37 41 37 −3 1 −3 16

(73)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3 37 41 37 −3 1 −3 16 −5

(74)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3 37 41 37 −3 1 −3 16 −5 16

(75)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3 37 41 37 −3 1 −3 16 −5 16 1

(76)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3 37 41 37 −3 1 −3 16 −5 16 1 4

(77)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3 37 41 37 −3 1 −3 16 −5 16 1 4 37

(78)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3 37 41 37 −3 1 −3 16 −5 16 1 4 37 4

(79)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3 37 41 37 −3 1 −3 16 −5 16 1 4 37 4 4

(80)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3 37 41 37 −3 1 −3 16 −5 16 1 4 37 4 4 −3

(81)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3 37 41 37 −3 1 −3 16 −5 16 1 4 37 4 4 −3 4

(82)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3 37 41 37 −3 1 −3 16 −5 16 1 4 37 4 4 −3 4 −21

(83)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3 37 41 37 −3 1 −3 16 −5 16 1 4 37 4 4 −3 4 −21 16

(84)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3 37 41 37 −3 1 −3 16 −5 16 1 4 37 4 4 −3 4 −21 16 −21

(85)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3 37 41 37 −3 1 −3 16 −5 16 1 4 37 4 4 −3 4 −21 16 −21 9

(86)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3 37 41 37 −3 1 −3 16 −5 16 1 4 37 4 4 −3 4 −21 16 −21 9 1

(87)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3 37 41 37 −3 1 −3 16 −5 16 1 4 37 4 4 −3 4 −21 16 −21 9 1 4

(88)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3 37 41 37 −3 1 −3 16 −5 16 1 4 37 4 4 −3 4 −21 16 −21 9 1 4 1

(89)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3 37 41 37 −3 1 −3 16 −5 16 1 4 37 4 4 −3 4 −21 16 −21 9 1 4 1 −39

(90)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3 37 41 37 −3 1 −3 16 −5 16 1 4 37 4 4 −3 4 −21 16 −21 9 1 4 1 −39 4

(91)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3 37 41 37 −3 1 −3 16 −5 16 1 4 37 4 4 −3 4 −21 16 −21 9 1 4 1 −39 4 −39

(92)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3 37 41 37 −3 1 −3 16 −5 16 1 4 37 4 4 −3 4 −21 16 −21 9 1 4 1 −39 4 −39 205

(93)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3 37 41 37 −3 1 −3 16 −5 16 1 4 37 4 4 −3 4 −21 16 −21 9 1 4 1 −39 4 −39 205 −21

(94)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3 37 41 37 −3 1 −3 16 −5 16 1 4 37 4 4 −3 4 −21 16 −21 9 1 4 1 −39 4 −39 205 −21 205

(95)

Przyporządkowania w algorytmie: q = ba/bc, r ← a − qb, a ← b, b ← r, x ← x2 − qx1, x2 ← x1, x1 ← x, y ← y2 − qy1, y2 ← y1, y1 ← y q r a b x x2 x1 y y2 y1 — — 841 160 — 1 0 — 0 1 5 41 160 41 1 0 1 −5 1 −5 3 37 41 37 −3 1 −3 16 −5 16 1 4 37 4 4 −3 4 −21 16 −21 9 1 4 1 −39 4 −39 205 −21 205

Z ostatniego wiersza odczytujemy:

(96)

10.10 Kongruencje

Dla danych trzech liczb całkowitych a, b i m mówimy, że liczba a przystaje do liczby b modulo m i piszemy a ≡ b (mod m), gdy różnica a − b jest podzielna przez m. Liczbę m nazywamy

(97)

10.10 Kongruencje

Dla danych trzech liczb całkowitych a, b i m mówimy, że liczba a przystaje do liczby b modulo m i piszemy a ≡ b (mod m), gdy różnica a − b jest podzielna przez m. Liczbę m nazywamy

modułem kongruencji.

Przykłady:

27 ≡ 7 (mod 5) bo 27 − 7 = 4 · 5 27 ≡ 2 (mod 5) bo 27 − 2 = 5 · 5 −8 ≡ 7 (mod 5) bo −8 − 7 = −3 · 5

(98)

Własności kongruencji:

a ≡ a (mod m)

a ≡ b (mod m) wtedy i tylko wtedy, gdy b ≡ a (mod m)

• Jeśli a ≡ b (mod m) oraz b ≡ c (mod m), to a ≡ c (mod m)

• Jeśli a ≡ b (mod m) i c ≡ d (mod m), to a ± c ≡ b ± d

(mod m) oraz ac ≡ bd (mod m)

Kongruencje względem tego samego modułu można dodawać, odejmować i mnożyć stronami.

• Jeśli a ≡ b (mod m), to a ≡ b (mod d) dla każdego dzielnika

(99)

Własności kongruencji:

a ≡ a (mod m)

a ≡ b (mod m) wtedy i tylko wtedy, gdy b ≡ a (mod m)

• Jeśli a ≡ b (mod m) oraz b ≡ c (mod m), to a ≡ c (mod m)

• Jeśli a ≡ b (mod m) i c ≡ d (mod m), to a ± c ≡ b ± d

(mod m) oraz ac ≡ bd (mod m)

Kongruencje względem tego samego modułu można dodawać, odejmować i mnożyć stronami.

• Jeśli a ≡ b (mod m), to a ≡ b (mod d) dla każdego dzielnika

(100)

Własności kongruencji:

a ≡ a (mod m)

a ≡ b (mod m) wtedy i tylko wtedy, gdy b ≡ a (mod m)

• Jeśli a ≡ b (mod m) oraz b ≡ c (mod m), to a ≡ c (mod m)

• Jeśli a ≡ b (mod m) i c ≡ d (mod m), to a ± c ≡ b ± d

(mod m) oraz ac ≡ bd (mod m)

Kongruencje względem tego samego modułu można dodawać, odejmować i mnożyć stronami.

• Jeśli a ≡ b (mod m), to a ≡ b (mod d) dla każdego dzielnika

(101)

Własności kongruencji:

a ≡ a (mod m)

a ≡ b (mod m) wtedy i tylko wtedy, gdy b ≡ a (mod m)

• Jeśli a ≡ b (mod m) oraz b ≡ c (mod m), to a ≡ c (mod m)

• Jeśli a ≡ b (mod m) i c ≡ d (mod m), to a ± c ≡ b ± d

(mod m) oraz ac ≡ bd (mod m)

Kongruencje względem tego samego modułu można dodawać, odejmować i mnożyć stronami.

• Jeśli a ≡ b (mod m), to a ≡ b (mod d) dla każdego dzielnika

(102)

Własności kongruencji:

a ≡ a (mod m)

a ≡ b (mod m) wtedy i tylko wtedy, gdy b ≡ a (mod m)

• Jeśli a ≡ b (mod m) oraz b ≡ c (mod m), to a ≡ c (mod m)

• Jeśli a ≡ b (mod m) i c ≡ d (mod m), to a ± c ≡ b ± d

(mod m) oraz ac ≡ bd (mod m)

Kongruencje względem tego samego modułu można dodawać, odejmować i mnożyć stronami.

• Jeśli a ≡ b (mod m), to a ≡ b (mod d) dla każdego dzielnika

(103)

Własności kongruencji:

a ≡ a (mod m)

a ≡ b (mod m) wtedy i tylko wtedy, gdy b ≡ a (mod m)

• Jeśli a ≡ b (mod m) oraz b ≡ c (mod m), to a ≡ c (mod m)

• Jeśli a ≡ b (mod m) i c ≡ d (mod m), to a ± c ≡ b ± d

(mod m) oraz ac ≡ bd (mod m)

Kongruencje względem tego samego modułu można dodawać, odejmować i mnożyć stronami.

• Jeśli a ≡ b (mod m), to a ≡ b (mod d) dla każdego dzielnika d|m

(104)

• Jeśli a ≡ b (mod m), a ≡ b (mod n), oraz m i n są względnie pierwsze, to a ≡ b (mod mn)

• Dla ustalonej liczby m, każda liczba przystaje modulo m do jednej liczby zawartej pomiędzy 0 i m − 1.

(105)

• Jeśli a ≡ b (mod m), a ≡ b (mod n), oraz m i n są względnie pierwsze, to a ≡ b (mod mn)

• Dla ustalonej liczby m, każda liczba przystaje modulo m do jednej liczby zawartej pomiędzy 0 i m − 1.

(106)

10.11 Twierdzenie o odwrotności

Liczbami a, dla których istnieje liczba b taka, że ab ≡ 1 (mod m), są dokładnie te liczby a, dla których N W D(a, m) = 1. Taka liczba odwrotna b = a−1 może być znaleziona w czasie O(ln2(m)).

(107)

10.11 Twierdzenie o odwrotności

Liczbami a, dla których istnieje liczba b taka, że ab ≡ 1 (mod m), są dokładnie te liczby a, dla których N W D(a, m) = 1. Taka liczba odwrotna b = a−1 może być znaleziona w czasie O(ln2(m)).

Przykład:

Ponieważ N W D(841, 160) = 1, to istnieje liczba

(108)

10.11 Twierdzenie o odwrotności

Liczbami a, dla których istnieje liczba b taka, że ab ≡ 1 (mod m), są dokładnie te liczby a, dla których N W D(a, m) = 1. Taka liczba odwrotna b = a−1 może być znaleziona w czasie O(ln2(m)).

Przykład:

Ponieważ N W D(841, 160) = 1, to istnieje liczba

160−1 (mod 841).

(109)

10.11 Twierdzenie o odwrotności

Liczbami a, dla których istnieje liczba b taka, że ab ≡ 1 (mod m), są dokładnie te liczby a, dla których N W D(a, m) = 1. Taka liczba odwrotna b = a−1 może być znaleziona w czasie O(ln2(m)).

Przykład:

Ponieważ N W D(841, 160) = 1, to istnieje liczba

160−1 (mod 841).

Liczbę tę można obliczyć za pomocą rozszerzonego algorytmu Euklidesa. Ponieważ

1 = −39 · 841 + 205 · 160, to 205 · 160 ≡ 1 (mod 841), a więc 160−1 (mod 841) = 205.

(110)

10.12 Małe twierdzenie Fermata

Niech p będzie liczbą pierwszą. Wtedy każda liczba a spełnia

kongruencję ap ≡ a (mod p) i każda liczba a niepodzielna przez p spełnia kongruencję

(111)

10.12 Małe twierdzenie Fermata

Niech p będzie liczbą pierwszą. Wtedy każda liczba a spełnia

kongruencję ap ≡ a (mod p) i każda liczba a niepodzielna przez p spełnia kongruencję

ap−1 ≡ 1 (mod p).

Liczba 1231 jest liczbą pierwszą i N W D(1231, 5871) = 1, więc

(112)

10.13 Chińskie twierdzenie o resztach

Jeśli liczby m1, m2, . . . , mk są parami względnie pierwsze, tzn. N W D(mi, mj) = 1 dla i 6= j, wtedy układ kongruencji

xa1 (mod m1)

xa2 (mod m2)

. . . . . .

xak (mod mk)

(113)

Przykład:

x ≡ 1 (mod 11)

x ≡ 2 (mod 12)

(114)

Przykład:

x ≡ 1 (mod 11)

x ≡ 2 (mod 12)

x ≡ 3 (mod 13)

Niech Mi = m/mi będzie iloczynem wszystkich modułów z wyjątkiem

i-tego. Wtedy N W D(mi, Mi) = 1, a więc istnieje taka liczba Ni, że

MiNi ≡ 1 (mod mi), wtedy wspólnym rozwiązaniem modulo m jest

x = Pi aiMiNi. Dla każdego i wszystkie składniki sumy poza i-tym są podzielne przez mi, gdyż mi|Mj dla j 6= i zatem dla każdego i mamy

(115)

W naszym przykładzie mamy:

a1 = 1, a2 = 2, a3 = 3,

m1 = 11, m2 = 12, m3 = 13, m = 1716,

(116)

W naszym przykładzie mamy:

a1 = 1, a2 = 2, a3 = 3,

m1 = 11, m2 = 12, m3 = 13, m = 1716,

M1 = 156, M2 = 143, M3 = 132.

Aby znaleźć wspólne rozwiązanie tego układu kongruencji należy znaleźć liczby Ni będące odwrotnościami liczb Mi modulo mi. W tym celu

możemy użyć algorytmu Euklidesa. W wyniku otrzymujemy liczby:

N1 = 6, N2 = 11 i N3 = 7.

Zatem wspólnym rozwiązaniem jest

x ≡ 1 · 6 · 156 + 2 · 11 · 143 + 3 · 7 · 132 (mod 1716)

(117)

W naszym przykładzie mamy:

a1 = 1, a2 = 2, a3 = 3,

m1 = 11, m2 = 12, m3 = 13, m = 1716,

M1 = 156, M2 = 143, M3 = 132.

Aby znaleźć wspólne rozwiązanie tego układu kongruencji należy znaleźć liczby Ni będące odwrotnościami liczb Mi modulo mi. W tym celu

możemy użyć algorytmu Euklidesa. W wyniku otrzymujemy liczby:

N1 = 6, N2 = 11 i N3 = 7.

Zatem wspólnym rozwiązaniem jest

x ≡ 1 · 6 · 156 + 2 · 11 · 143 + 3 · 7 · 132 (mod 1716)

≡ 1706 (mod 1716).

W tym przykładzie widać, że liczba −10 daje takie reszty zatem

(118)

10.14 Funkcja Eulera

Dla n ≥ 1, niech φ(n) będzie liczbą tych nieujemnych liczb b

mniejszych od n, które są względnie pierwsze z n. Funkcja φ(n) nazywa się funkcją Eulera.

(119)

10.14 Funkcja Eulera

Dla n ≥ 1, niech φ(n) będzie liczbą tych nieujemnych liczb b

mniejszych od n, które są względnie pierwsze z n. Funkcja φ(n) nazywa się funkcją Eulera.

Funkcja Eulera φ jest „multiplikatywna”, tzn. φ(mn) = φ(m)φ(n), jeśli tylko N W D(m, n) = 1.

(120)

10.14 Funkcja Eulera

Dla n ≥ 1, niech φ(n) będzie liczbą tych nieujemnych liczb b

mniejszych od n, które są względnie pierwsze z n. Funkcja φ(n) nazywa się funkcją Eulera.

Funkcja Eulera φ jest „multiplikatywna”, tzn. φ(mn) = φ(m)φ(n), jeśli tylko N W D(m, n) = 1.

10.15 Twierdzenie Eulera

(121)

10.14 Funkcja Eulera

Dla n ≥ 1, niech φ(n) będzie liczbą tych nieujemnych liczb b

mniejszych od n, które są względnie pierwsze z n. Funkcja φ(n) nazywa się funkcją Eulera.

Funkcja Eulera φ jest „multiplikatywna”, tzn. φ(mn) = φ(m)φ(n), jeśli tylko N W D(m, n) = 1.

10.15 Twierdzenie Eulera

Jeśli N W D(a, m) = 1, to aφ(m) ≡ 1 (mod m). Wniosek

Jeśli N W D(a, m) = 1 i jeśli n0 jest resztą z dzielenia n przez φ(m), to an ≡ an0 (mod m)

(122)

10.16 Potęgowanie modulo metodą iterowanego podnoszenia do kwadratu

Podstawowym działaniem w kryptografii jest obliczanie an

(123)

10.16 Potęgowanie modulo metodą iterowanego podnoszenia do kwadratu

Podstawowym działaniem w kryptografii jest obliczanie an

(mod m), gdzie m i n są bardzo dużymi liczbami. Zauważmy, że rozwinięcie dwójkowe liczby n ma postać

n =

k−1 X

i=0

ni2i = n0 + 2n1 + 4n2 + · · · + 2k−1nk−1

(124)

10.16 Potęgowanie modulo metodą iterowanego podnoszenia do kwadratu

Podstawowym działaniem w kryptografii jest obliczanie an

(mod m), gdzie m i n są bardzo dużymi liczbami. Zauważmy, że rozwinięcie dwójkowe liczby n ma postać

n =

k−1 X

i=0

ni2i = n0 + 2n1 + 4n2 + · · · + 2k−1nk−1

gdzie ni ∈ {0, 1} są cyframi rozwinięcia dwójkowego. Zatem

an =

k−1 Y

i=0

(125)

• Załóżmy, że a < m oraz przyjmijmy, że przez b będziemy oznaczali częściowe iloczyny. Na początku b = 1.

• Jeżeli n0 = 1 to zastępujemy b przez a, w przeciwnym przypadku nadal b = 1.

• Następnie liczymy a1 ≡ a2 (mod m). Jeśli n1 = 1, to

mnożymy b przez a1 i redukujemy modulo m, zaś jeśli n1 = 0 nie zmieniamy b.

• Następnie liczymy a2 ≡ a21 (mod m). Znowu, jeśli n2 = 1, to mnożymy b przez a2; w przeciwnym przypadku nie zmieniamy

(126)

• Załóżmy, że a < m oraz przyjmijmy, że przez b będziemy oznaczali częściowe iloczyny. Na początku b = 1.

• Jeżeli n0 = 1 to zastępujemy b przez a, w przeciwnym przypadku nadal b = 1.

• Następnie liczymy a1 ≡ a2 (mod m). Jeśli n1 = 1, to

mnożymy b przez a1 i redukujemy modulo m, zaś jeśli n1 = 0 nie zmieniamy b.

• Następnie liczymy a2 ≡ a21 (mod m). Znowu, jeśli n2 = 1, to mnożymy b przez a2; w przeciwnym przypadku nie zmieniamy

(127)

• Załóżmy, że a < m oraz przyjmijmy, że przez b będziemy oznaczali częściowe iloczyny. Na początku b = 1.

• Jeżeli n0 = 1 to zastępujemy b przez a, w przeciwnym przypadku nadal b = 1.

• Następnie liczymy a1 ≡ a2 (mod m). Jeśli n1 = 1, to

mnożymy b przez a1 i redukujemy modulo m, zaś jeśli n1 = 0

nie zmieniamy b.

• Następnie liczymy a2 ≡ a21 (mod m). Znowu, jeśli n2 = 1, to mnożymy b przez a2; w przeciwnym przypadku nie zmieniamy

(128)

• Załóżmy, że a < m oraz przyjmijmy, że przez b będziemy oznaczali częściowe iloczyny. Na początku b = 1.

• Jeżeli n0 = 1 to zastępujemy b przez a, w przeciwnym przypadku nadal b = 1.

• Następnie liczymy a1 ≡ a2 (mod m). Jeśli n1 = 1, to

mnożymy b przez a1 i redukujemy modulo m, zaś jeśli n1 = 0 nie zmieniamy b.

• Następnie liczymy a2 ≡ a21 (mod m). Znowu, jeśli n2 = 1, to mnożymy b przez a2; w przeciwnym przypadku nie zmieniamy b.

(129)

• Postępując dalej w ten sposób, w j-tym kroku mamy obliczoną potęgę aj ≡ a2j (mod m). Jeśli nj = 1 to włączamy aj do

iloczynu b, jeśli nj = 0 to b się nie zmienia.

(130)

• Postępując dalej w ten sposób, w j-tym kroku mamy obliczoną potęgę aj ≡ a2j (mod m). Jeśli nj = 1 to włączamy aj do

iloczynu b, jeśli nj = 0 to b się nie zmienia.

(131)

• Postępując dalej w ten sposób, w j-tym kroku mamy obliczoną potęgę aj ≡ a2j (mod m). Jeśli nj = 1 to włączamy aj do

iloczynu b, jeśli nj = 0 to b się nie zmienia.

• Po k − 1 krokach otrzymamy b ≡ an (mod m). Przykład: Obliczmy 7698 (mod 1234) = 287 i 0 1 2 3 4 5 6 7 8 9 ni 0 1 0 1 1 1 0 1 0 1 ai 7 49 1167 787 1135 1163 105 1153 391 1099 b 1 49 49 309 259 121 121 71 71 287

(132)

10.17 Czy wystarczy liczb pierwszych?

Twierdzenie

Niech π(x) oznacza liczbę liczb pierwszych ≤ x. Wtedy

lim

x→∞

π(x)

(133)

10.17 Czy wystarczy liczb pierwszych?

Twierdzenie

Niech π(x) oznacza liczbę liczb pierwszych ≤ x. Wtedy

lim x→∞ π(x) x/ ln x = 1 Dla x ≥ 17 π(x) > x ln x

Dla przykładu, dla x = 1010, π(x) = 455052511, natomiast

(134)

10.18 Testy pierwszości

Istnieją probabilistyczne testy pierwszości liczb, które pozwalają z dużym prawdopodobieństwem w skończonym czasie dać odpowiedź czy dana liczba jest pierwsza.

(135)

10.18.1 Test Fermata

• Testujemy czy liczba n jest pierwsza

• Wybieramy losowo liczbę a < n − 1, obliczamy r = an−1

(mod n), jeśli r 6= 1 to n jest liczbą złożoną

• Test przeprowadzamy t-krotnie, t ≥ 1. Jeśli wszystkie testy wypadną pomyślnie, tzn. r = 1, to liczbę uznajemy za

(136)

10.18.1 Test Fermata

• Testujemy czy liczba n jest pierwsza

• Wybieramy losowo liczbę a < n − 1, obliczamy r = an−1

(mod n), jeśli r 6= 1 to n jest liczbą złożoną

• Test przeprowadzamy t-krotnie, t ≥ 1. Jeśli wszystkie testy wypadną pomyślnie, tzn. r = 1, to liczbę uznajemy za

(137)

10.18.1 Test Fermata

• Testujemy czy liczba n jest pierwsza

• Wybieramy losowo liczbę a < n − 1, obliczamy r = an−1

(mod n), jeśli r 6= 1 to n jest liczbą złożoną

• Test przeprowadzamy t-krotnie, t ≥ 1. Jeśli wszystkie testy wypadną pomyślnie, tzn. r = 1, to liczbę uznajemy za

(138)

10.18.1 Test Fermata

• Testujemy czy liczba n jest pierwsza

• Wybieramy losowo liczbę a < n − 1, obliczamy r = an−1

(mod n), jeśli r 6= 1 to n jest liczbą złożoną

• Test przeprowadzamy t-krotnie, t ≥ 1. Jeśli wszystkie testy wypadną pomyślnie, tzn. r = 1, to liczbę uznajemy za

(139)

10.18.2 Test Millera-Rabina

• Testujemy czy liczba n jest pierwsza

• Piszemy n − 1 = 2sr, gdzie r jest nieparzyste

• Wybieramy losowo liczbę a, 1 < a < n − 1. Obliczamy b = ar

(mod n). Jeśli b ≡ ±1 (mod n) to uznajemy, że n jest liczbą pierwszą.

• W przeciwnym przypadku obliczamy a2jr (mod n) dla 0 < j < s.

Jeśli dla pewnego j < s otrzymamy a2jr ≡ −1 (mod n) to uznajemy, że n jest pierwsza.

• W przeciwnym przypadku liczba n jest złożona. • Test przeprowadzamy t-krotnie dla różnych a.

Cytaty

Powiązane dokumenty

Rozwiązanie każdego zadania należy podpisać w lewym górnym rogu pierwszej jego strony: imieniem i nazwiskiem, swoim adresem, swoim adresem elektro- nicznym oraz klasą, nazwą i

Na zajęciach dowiemy się jak odczytać z wykresu dziedzinę funkcji, zbiór wartości, monotoniczność, wartości dodatnie, ujemne, wartość największą i najmniejszą,

Każdy Polak decyduje się na w ybór tej ostatniej drogi i pom aga budow ać tamy, które w ostatniej minucie powstrzymają czerwoną pow ódź.. Znam y nasz los i

Wniosek: mnożąc i dzieląc obustronnie przez tę samą liczbę różną od zera, dodając i odejmując obustronnie tę samą liczbę otrzymujemy takie samo rozwiązanie, czyli

Dla dodatniej liczby naturalnej n znaleźć wzór na największą potęgę liczby pierwszej p dzielącą n!4. Rozłożyć na czynniki pierwsze

Porównaj (wymieniając wady i zalety) metody grupowania i podziału połówkowego pod kątem aktualizacji systemów informacyjnych pracujących zgodnie z tymi metodami wyszukiwania..

Za pomocą symboli arytmetycznych i symboli rachun- ku zdań zapisać następujące twierdzenia arytmetyki liczb rzeczywistych.. (a) Jeśli liczba jest różna od zera, to (jest ujemna

 Jaki będzie wektor udziałów grupy krwi dla osobników z następnego pokolenia, dla którego jednym z rodziców jest ktoś