Algorytmy w teorii liczb

Podobne dokumenty
Wykład 4. Określimy teraz pewną ważną klasę pierścieni.

Przykładowe zadania z teorii liczb

Wykład 1. Na początku zajmować się będziemy zbiorem liczb całkowitych

Teoria liczb. Magdalena Lemańska. Magdalena Lemańska,

Dr inż. Robert Wójcik, p. 313, C-3, tel Katedra Informatyki Technicznej (K-9) Wydział Elektroniki (W-4) Politechnika Wrocławska

2. Liczby pierwsze i złożone, jednoznaczność rozkładu na czynniki pierwsze, największy wspólny dzielnik, najmniejsza wspólna wielokrotność.

Algorytm Euklidesa. Największy wspólny dzielnik dla danych dwóch liczb całkowitych to największa liczba naturalna dzieląca każdą z nich bez reszty.

Piotr Chrząstowski-Wachtel Uniwersytet Warszawski. Al Chwarizmi i trzy algorytmy Euklidesa

Wybrane zagadnienia teorii liczb

Zadania do samodzielnego rozwiązania

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami

1. Wykład NWD, NWW i algorytm Euklidesa.

Podstawą w systemie dwójkowym jest liczba 2 a w systemie dziesiętnym liczba 10.

Matematyka dyskretna

1. Liczby wymierne. x dla x 0 (wartością bezwzględną liczby nieujemnej jest ta sama liczba)

Kongruencje i ich zastosowania

Zaawansowane algorytmy i struktury danych

Matematyka dyskretna

Matematyka dyskretna

Kongruencje oraz przykłady ich zastosowań

Liczby całkowite. Zadania do pierwszych dwóch lekcji

Największy wspólny dzielnik Algorytm Euklidesa (także rozszerzony) WZAiP1: Chińskie twierdzenie o resztach

ALGORYTMY MATEMATYCZNE Ćwiczenie 1 Na podstawie schematu blokowego pewnego algorytmu (rys 1), napisz listę kroków tego algorytmu:

Jarosław Wróblewski Matematyka Elementarna, lato 2012/13. W dniu 21 lutego 2013 r. omawiamy test kwalifikacyjny.

LICZBY PIERWSZE. 14 marzec Jeśli matematyka jest królową nauk, to królową matematyki jest teoria liczb. C.F.

KONGRUENCJE. 1. a a (mod m) a b (mod m) b a (mod m) a b (mod m) b c (mod m) a c (mod m) Zatem relacja kongruencji jest relacją równoważności.

Matematyka dyskretna

Zegar ten przedstawia reszty z dzielenia przez 6. Obrazuje on jak kolejne liczby można przyporządkować do odpowiednich pokazanych na zegarze grup.

Jarosław Wróblewski Matematyka Elementarna, zima 2012/13

TEORETYCZNE PODSTAWY INFORMATYKI

Algorytmy i struktury danych. Wykład 4

Kongruencje pierwsze kroki

Jeśli czas działania algorytmu zależy nie tylko od rozmiaru danych wejściowych i przyjmuje różne wartości dla różnych danych o tym samym rozmiarze,

0 + 0 = 0, = 1, = 1, = 0.

Treść wykładu. Pierścienie wielomianów. Dzielenie wielomianów i algorytm Euklidesa Pierścienie ilorazowe wielomianów

Laboratorium kryptograficzne dla licealistów 6

Wykład 2. Informatyka Stosowana. 9 października Informatyka Stosowana Wykład 2 9 października / 42

Wykład 2. Informatyka Stosowana. 10 października Informatyka Stosowana Wykład 2 10 października / 42

Matematyka Dyskretna Zestaw 2

MADE IN CHINA czyli SYSTEM RESZTOWY

2. Liczby pierwsze i złożone, jednoznaczność rozkładu na czynniki pierwsze, największy wspólny dzielnik, najmniejsza wspólna wielokrotność. (c.d.

Pierścień wielomianów jednej zmiennej

Wokół Problemu Steinhausa z teorii liczb

Twierdzenie Eulera. Kongruencje wykład 6. Twierdzenie Eulera

Jarosław Wróblewski Matematyka Elementarna, zima 2015/16

Wykład z równań różnicowych

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Kongruencje. Sławomir Cynk. 24 września Nowy Sącz. Instytut Matematyki Uniwersytetu Jagiellońskiego

Funkcja kwadratowa. f(x) = ax 2 + bx + c = a

Ciała i wielomiany 1. przez 1, i nazywamy jedynką, zaś element odwrotny do a 0 względem działania oznaczamy przez a 1, i nazywamy odwrotnością a);

Technologie informacyjne Wykład VII-IX

Wykłady z dydaktyki matematyki (klasy IV-VIII) III rok matematyki semestr zimowy 2017/2018 ćwiczenia i wykład nr 6

Luty 2001 Algorytmy (7) 2000/2001

Wielomiany. dr Tadeusz Werbiński. Teoria

Funkcja kwadratowa. f(x) = ax 2 + bx + c,

Siedem cudów informatyki czyli o algorytmach zdumiewajacych

Teoria liczb. Zajmuje się własnościami liczb, wszystkim całkowitych

Wykład 2. Informatyka Stosowana. 8 października 2018, M. A-B. Informatyka Stosowana Wykład 2 8 października 2018, M. A-B 1 / 41

Elementy teorii liczb. Matematyka dyskretna

I Liceum Ogólnokształcące im. Cypriana Kamila Norwida w Bydgoszczy. Wojciech Kretowicz PODZIELNOŚĆ SILNI A SUMA CYFR

Matematyka dyskretna

FUNKCJA REKURENCYJNA. function s(n:integer):integer; begin if (n>1) then s:=n*s(n-1); else s:=1; end;

Podzielność, cechy podzielności, liczby pierwsze, największy wspólny dzielnik, najmniejsza wspólna wielokrotność.

Jarosław Wróblewski Matematyka Elementarna, lato 2010/11

Liczby pierwsze. Kacper Żurek, uczeń w Gimnazjum nr 1 im. Jana Pawła II w Giżycku.

1. Liczby naturalne, podzielność, silnie, reszty z dzielenia

Pierwiastki pierwotne, logarytmy dyskretne

Paweł Gładki. Algebra. pgladki/

Zadanie 1. Zmiana systemów. Zadanie 2. Szyfr Cezara. Zadanie 3. Czy liczba jest doskonała. Zadanie 4. Rozkład liczby na czynniki pierwsze Zadanie 5.

Kurs ZDAJ MATURĘ Z MATEMATYKI MODUŁ 2 Teoria liczby rzeczywiste cz.2

2 Arytmetyka. d r 2 r + d r 1 2 r 1...d d 0 2 0,

Podstawy programowania. Podstawy C# Przykłady algorytmów

Urządzenia Techniki. Klasa I TI. System dwójkowy (binarny) -> BIN. Przykład zamiany liczby dziesiętnej na binarną (DEC -> BIN):

Samodzielnie wykonaj następujące operacje: 13 / 2 = 30 / 5 = 73 / 15 = 15 / 23 = 13 % 2 = 30 % 5 = 73 % 15 = 15 % 23 =

0 --> 5, 1 --> 7, 2 --> 9, 3 -->1, 4 --> 3, 5 --> 5, 6 --> 7, 7 --> 9, 8 --> 1, 9 --> 3.

Warmińsko-Mazurskie Zawody Matematyczne Eliminacje cykl styczniowy Poziom: szkoły ponadgimnazjalne, 10 punktów za każde zadanie

Analiza algorytmów zadania podstawowe

Jeśli lubisz matematykę

LISTA 1 ZADANIE 1 a) 41 x =5 podnosimy obustronnie do kwadratu i otrzymujemy: 41 x =5 x 5 x przechodzimy na system dziesiętny: 4x 1 1=25 4x =24

W. Guzicki Próbna matura, grudzień 2014 r. poziom rozszerzony 1

Przypomnienie wiadomości dla trzecioklasisty C z y p a m i ę t a s z?

Kod U2 Opracował: Andrzej Nowak

5. Rekurencja. Przykłady

Podstawy Informatyki. Sprawność algorytmów

Matematyka dyskretna. Andrzej Łachwa, UJ, 2019 Zadania 1-100

Rekurencja (rekursja)

Sumy kwadratów kolejnych liczb naturalnych

Tematyka do egzaminu ustnego z matematyki. 3 semestr LO dla dorosłych

Matematyka z kluczem. Szkoła podstawowa nr 18 w Sosnowcu. Przedmiotowe zasady oceniania klasa 7

Przykładowe zadania na kółko matematyczne dla uczniów gimnazjum

Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 15, Kryptografia: algorytmy asymetryczne (RSA)

Algebra Liniowa 2 (INF, TIN), MAP1152 Lista zadań

3. Macierze i Układy Równań Liniowych

TEORETYCZNE PODSTAWY INFORMATYKI

Liczby zespolone. x + 2 = 0.

Indukcja matematyczna. Zasada minimum. Zastosowania.

Wrocław, Wstęp do informatyki i programowania: liczby pierwsze. Wydział Matematyki Politechniki Wrocławskiej.

Całki nieoznaczone. 1 Własności. 2 Wzory podstawowe. Adam Gregosiewicz 27 maja a) Jeżeli F (x) = f(x), to f(x)dx = F (x) + C,

ALGORYTMY I STRUKTURY DANYCH

Algebra liniowa z geometrią analityczną

Transkrypt:

Łukasz Kowalik, ASD 2004: Algorytmy w teorii liczb 1 Algorytmy w teorii liczb Teoria liczb jest działem matemtyki dotyczącym własności liczb naturalnych. Rozważa się zagadnienia związane z liczbami pierwszymi, podzielnością liczb, rozkładem liczb na czynniki pierwsze, kongruencje itd. Formułuje się także wiele ciekawych problemów algorytmicznych, z których wiele ma ważne zastosowania, np. w kryptografii (dziedzina zajmująca się szyfrowaniem informacji). Oto przykład dobrze wszystkim znanego problemu algorytmicznego: Dane: liczby a i b Problem: znaleźć liczbę c = a b. Znamy oczywiście szkolny algorytm rozwiązywania tego problemu. Powstaje pytanie jaka jest jego złożoność czasowa. I tu ważna informacja: rozważając problemy teorioliczbowe jako rozmiar danych przyjmujemy długość zapisu liczby w pewnym układzie pozycyjnym (np. dziesiątkowym lub dwójkowym). Długość zapisu liczby x w układzie o podstawie b będziemy oznaczać przez lh b (x). Fakt 1. Długość zapisu liczby x w układzie o podstawie b wynosi lh b (x) = 1 + log b x. Uzasadnienie. To, że n jest długością zapisu liczby x w układzie o podstawie b oznacza, że x = c n 1 b n 1 + c n 2 b n 2 +... + c 1 b + c 0 gdzie c i to kolejne cyfry, tzn. 0 < c n 1 < b oraz 0 c i < b dla i = 0, 1,... c n 2. Wtedy b n > x b n 1. Zlogarytmujmy obustronnie, otrzymujemy n > log b x n 1. To oznacza dokładnie tyle, że n 1 = log b x. A więc lh b (x) = n = 1 + log b x. Jeśli interesuje nas złożoność asymptotyczna algorytmów, to nie ma znaczenia w jakim układzie pozycyjnym liczymy, bo przecież lh a (x) = 1 + log a x = 1 + 1 log log b a b x = O(log b x). W dalszej kolejności będziemy więc zakładać, że liczby są dane binarnie, tzn. b = 2 oraz oznaczymy lh(x) = lh 2 (x). Fakt 2. Niech lh(x) = n, lh(y) = m. Wtedy złożoności czasowe algorytmów szkolnych wynoszą odpowiednio: dla dodawania: O(n + m), dla odejmowania: O(n + m), dla mnożenia: O(nm), dla dzielenia (obliczanie wyniku z dzielenia i reszty): O(nm).

Łukasz Kowalik, ASD 2004: Algorytmy w teorii liczb 2 Dodawanie i odejmowanie działa w czasie liniowym a więc optymalnie. Okazuje się, że można szybciej. Niech lh(a) = lh(b) = 2n. Przedstawimy liczby a i b w następującej postaci: a = 2 n A 1 + A 2, b = 2 n B 1 + B 2, gdzie lh(a 1 ) = lh(a 2 ) = lh(b 1 ) = lh(b 2 ) = n. Wtedy: (2 2n + 2 n )A 1 B 1 + 2 n (A 1 A 2 )(B 2 B 1 ) + (2 n + 1)A 2 B 2 = 2 2n A 1 B 1 + 2 n A 1 B 1 + 2 n (A 1 B 2 A 1 B 1 A 2 B 2 + A 2 B 1 ) + 2 n A 2 B 2 + A 2 B 2 = 2 2n A 1 B 1 + 2 n A 1 B 2 + 2 n A 2 B 1 + A 2 B 2 = ab. W pierwszej linijce mamy sposób obliczania iloczynu ab. Zauważmy, że mnożenie przez potęgę dwójki 2 k wykonujemy w czasie O(k) liczby mamy zapisane binarnie a więc takie mnożenie to po prostu dodanie k zer na końcu. Oprócz dopisywania zer mamy 6 operacji dodawania i odejmowania, które w sumie zajmują czas O(n) no i trzy mnożenia liczb długości n a więc dwa razy krótszych. Te mnożenia wykonujemy rekurencyjnie. Jaką złożoność ma nasz algorytm? Niech T (n) będzie liczbą wykonywanych operacji. Wtedy: T (2n) 3T (n) + Cn. dla pewnej stałej C. Rozwiążemy równanie rekurencyjne: T (1) = 1, T (2n) = 3T (n) + Cn. Przy obliczaniu złożoności wystarczy założyć, że n jest potęgą dwójki. Wtedy: I dalej: T (2 k ) = 3T (2 k 1 ) + C2 k 1 = T (2 k ) = 3T (2 k 1 ) + C2 k 1. = 3(T (2 k 2 ) + C2 k 2 ) + C2 k 1 = = 3 2 (T (2 k 3 ) + C2 k 3 ) + 3C2 k 2 + C2 k 1 =... = 3 k 1 T (2 0 ) + 3 k 1 C2 0 + 3 k 2 C2 1 +... + 3C2 k 2 + C2 k 1 3 k c = = (2 log 2 3 ) k = = (2 k ) log 2 3. dla pewnej stałej c. Stąd T (n) = n log 2 3. Tymczasem log 2 3 1, 585 czyli mamy algorytm w czasie O(n 1,585 ) czyli dużo lepiej niż n 2.

Łukasz Kowalik, ASD 2004: Algorytmy w teorii liczb 3 NWD i Algorytm Euklidesa Przypomnijmy kilka prostych pojęć. Zbiór liczb całkowitych oznaczamy symbolem Z. Liczba całkowita d 0 jest dzielnikiem liczby cakowitej a, gdy dla pewnego k Z ma miejsce a = k b. Piszemy wtedy d a i mówimy, że d dzieli a. Przykład: 2 10, 5 5, 2 3. Największy wspólny dzielnik liczb a i b to największa liczba, która jest jednocześnie dzielnikiem a i dzielnikiem b, inaczej: NWD(a, b) = max{d Z : d a oraz d b}. Przykład: NWD(15, 6) = 3, NW D(18, 12) = 6, NW D(7, 15) = 1, NW D(a, 0) = 6 dla a > 0. Dane: Zajmiemy się następującym problemem algorytmicznym: Problem: liczby a i b znaleźć NWD(a, b). Twierdzenie (algorytm szkolny ). Jeśli mamy rozkład liczb a i b na czynniki pierwsze: to wtedy a = p α 1 1 p α 2 2... p αn n, b = p β 1 1 p β 2 2... p βn n. NWD(a, b) = p min(α 1,β 1 ) 1 p min(α 2,β 2 ) 2... p min(αn,βn) n. Oczywiście w powyższym twierdzeniu dopuszczamy możliwość α i = 0, β i = 0 dzięki temu ten zapis ma sens nawet gdy pewna liczba pierwsza p i dzieli a ale nie dzieli b. Zauważmy, że powyższy wzór odzwierciedla dokładnie sposób, w jaki obliczają NWD dzieci w szkole. Zauważmy jednak, że taki algorytm ma jedynie znaczenie dydaktyczne pozwalające oswoić się z faktem, że wszystkie liczby składają się z liczb pierwszych. Gdybyśmy chcieli taki algorytm zapisać jako program komputerowy powstaje pytanie jak znajdować rozkłady liczb na czynniki pierwsze. Okazuje się jednak że znajdowanie takiego rozkładu to bardzo trudny problem: żeby rozłożyć liczbę długości n najlepsze znane algorytmy potrzebują czasu wykładniczego w rodzaju O(e n1/3 log 2/3 n ). A jaka jest złożoność Algorytmu szkolnego? Załóżmy, że rozkładamy n-cyfrową liczbę a. Bierzemy kolejne liczby pierwsze (wystarczy od 2 do a ) i dla każdej z nich sprawdzamy, czy dzielą a. Tymczasem prawdziwe jest twierdzenie: Twierdzenie. Jest Θ(k/ log k) liczb pierwszych mniejszych od k. Jeśli a jest n-cyfrowa to 10 n > a 10 n 1, czyli 10 n/2 > a 10 (n 1)/2 a zatem liczb pierwszych mniejszych od a jest Θ(10 (n 1)/2 /n). A więc algorytm szkolny też jest wykładniczy. Pokażemy lepszy algorytm. Potrzebny będzie następujący fakt:

Łukasz Kowalik, ASD 2004: Algorytmy w teorii liczb 4 Fakt 3. NWD(a + cb, b) = NWD(a, b). Dowód. Pokażemy, że wspólne dzielniki liczb a + cb, b są takie same jak wspólne dzielniki liczb a i b. Wtedy największe wspólne dzielniki też będą takie same. Jeśli d a i d b to d (a + cb) czyli jeśli d jest wspólnym dzielnikiem a i b to jest też wspólnym dzielnikiem a + cb i b. Na odwrót, jeśli d (a + cb) oraz d b, czyli (a + cb) = k d oraz b = l d to a = kd cb = kd cld d(k lc) a więc d a. Stąd d jest wspólnym dzielnikiem a i b. Co wynika z tego faktu? Jeśli chcemy obliczyć NWD(x, y) dla x > y to wykonujemy dzielenie z resztą x przez y. Wtedy x = ky + r gdzie 0 r < y (r jest resztą). Wiemy, że NWD(x, y) = NWD(ky + r, y) = NWD(r, y). Powtarzamy tę operację aż jedna z liczb będzie równa zero. Oto pseudokod algorytmu: Algorithm 1 Algorytm Euklidesa 1: function Euklides (a, b) : Integer 2: if b = 0 then 3: Result a 4: else 5: Result Euklides (b, a mod b) Przykład. Obliczymy NWD(574, 252): A więc NWD(574, 252) = 14. 574 = 2 252 + 70, 252 = 3 70 + 42, 70 = 1 42 + 28, 42 = 1 28 + 14, 28 = 2 14 + 0, Wbrew pozorom algorytm Euklidesa wymyślił Eudoksos w IV wieku p.n.e. Wymyślił też kilka innych pożytecznych rzeczy jak np. liczby rzeczywiste albo tzw. metodę wyczerpywania, podobną do współczesnej całki Riemmana. Wkład Euklidesa jest natomiast taki, że opisał on nasz algorytm w swoich Elementach. Zastanówmy się nad złożonością algorytmu Euklidesa. Jaki jest pesymistyczny przypadek? Najgorzej jest gdy zawsze wynik dzielenia a div b 1, bo wtedy liczby najwolniej spadają. Tak jest dla liczb Fibonacciego. Dla przypomnienia n-ta liczba Fibonacciego dana jest wzorem rekurencyjnym: F 1 = 1, F 2 = 1, F n = F n 1 + F n 2 dla n > 2. Kolejne

Łukasz Kowalik, ASD 2004: Algorytmy w teorii liczb 5 liczby Fibonacciego to: 1, 1, 2, 3, 5, 8, 13, 21, 34,.... Policzmy np NWD(21, 13): F 8 = 21 = 1 13 + 8, F 7 = 13 = 1 8 + 5, F 6 = 8 = 1 5 + 3, F 5 = 5 = 1 3 + 2, F 4 = 3 = 1 2 + 1, F 3 = 2 = 2 1 + 0. Widzimy, że kolejne reszty z dzielenia to kolejne liczby Fibonacciego. Ma więc miejsce następujący fakt: Fakt 4. Dla dowolnego n > 0 jest NWD(F n+2, F n+1 ) = 1 i algorytm Euklidesa wykonuje dokładnie n dzieleń. Twierdzenie (Lamégo). Jeśli a > b 0 oraz b < F k+1 to algorytm Euklidesa wykonuje mniej niż k dzieleń. Uzasadnienie. Po pierwszym dzieleniu dostajemy dwie liczby, z których większa jest mniejsza niż F k+1. Nawet jeśli odtąd wynikiem z dzielenia zawsze będzie 1, to tych dzieleń będzie co najwyżej k 1 (tyle by było gdybyśmy mieli dwie liczby Fibonacciego). Wniosek 1. Algorytm Euklidesa uruchomiony dla liczb a > b, z których większa ma n cyfr działa w czasie O(n 3 ). Uzasadnienie. Załóżmy, że F k b < F k+1. Wtedy wykona się co najwyżej k dzieleń. Tymczasem wiadomo, że F k > φ k 2 dla k 3, gdzie φ = 1+ 5. A więc φ k 2 < b. Weźmy 2 logarytm k 2 < log φ b = O(lh(b)) = O(n) a więc wykona się O(n) dzieleń, każde w czasie O(n 2 ). Koniec uzasadnienia. A więc algorytm Euklidesa działa w czasie wielomianowym! Nasze szacowanie jest jednak niedokładne. Można pokazać (i to elementarnymi metodami), że Twierdzenie. Algorytm euklidesa obliczający NWD n-cyfrowej liczby a i m-cyfrowej liczby b ma złożoność O(nm).