wiele 46
Transkrypt
wiele 46
Algorytm Euklidesa • Danymi są dwie nieujemne liczby całkowite m i n. Liczba k jest największym wspólnym dzielnikiem m i n, jeśli dzieli m oraz n i jest największą liczbą o tej własności - oznaczamy ją przez NWD(m, n). • Algorytm Euklidesa znajduje największy wspólny dzielnik dwóch liczb. Jest to jeden z algorytmów najczęściej przytaczanych w książkach informatycznych i matematycznych. Powodem tego jest nie tylko szacunek dla jego ''wieku'', ale to, że: – ma wiele zastosowań w rozwiązywaniu problemów rachunkowych – można na jego przykładzie zilustrować wiele podstawowych pojęć i własności informatycznych (algorytm rekurencyjny i dowodzenie poprawności algorytmów) – Algorytm ten Euklidesa zamieścił w swoim wiekopomnym dziele Elementy. Było to około 300 roku p.n.e., a więc na długo przed pojawieniem się określenia algorytm. Przypuszcza się, że ten algorytm był znany jeszcze wcześniej. Wiele innych przepisów rachunkowych stosowano już w Babilonie blisko 1800 roku p.n.e. Jednak nie nadaje się im takiego znaczenia, jak algorytmowi Euklidesa, gdyż nie zawierają w sobie iteracji i wiele z nich zostało wypartych przez współczesne metody. Luty 2001 Algorytmy (8) 2000/2001 [email protected] 1 • Załóżmy, że n > m. Gdy podzielimy n przez m, otrzymamy równość n = qm + r, gdzie 0 < r <m • Wielkości q i r są odpowiednio ilorazem i resztą z dzielenia n przez m. • Jeśli r = 0, to NWD (m,n) = m, czyli jeśli jedna z liczb dzieli drugą bez reszty, to mniejsza z tych liczb jest ich największym wspólnym dzielnikiem. • Jeśli r = 0, to równość można zapisać w postaci r = n - qm; stąd wynika,że każda liczba dzieląca n i m dzieli całe wyrażenie po prawej stronie tej równości, a więc dzieli również r; zatem, największy wspólny dzielnik m i n dzieli również resztę r. • Te dwa wnioski można zapisać w postaci następującej równości: NWD(m,n) = NWD(r,m) w której przyjęliśmy, że NWD(0,m) = m, gdyż 0 jest podzielne przez każdą liczbę różną od zera. • Ponieważ r<m pierwszy element w parze argumentów w funkcji NWD maleje. Ponieważ w obliczeniach występują jedynie liczby naturalne ten malejący ciąg reszt musi być skończony (ostatecznie reszta jest równa zeru). • 48=1*46+2 46=23*2+0 NWD(46,48)=NWD(2,46)=2 Luty 2001 Algorytmy (8) 2000/2001 [email protected] 2 • W algorytmie Euklidesa generujemy pary liczb o tym samym największym wspólnym dzielniku, elementy tych par tworzą malejący ciąg liczb naturalnych, a więc ten ciąg jest skończony i na jego końcu otrzymujemy szukany dzielnik. UWAGA: iloraz q nie występuje w kolejnych iteracjach, nie trzeba go zatem wyznaczać. Algorytm Euklidesa z dzieleniem wyznaczania NWD Dane: Dwie liczby naturalne m i n. Wynik: NWD(m i n) - największy wspólny dzielnik m i n. • Krok 1. Jeśli m = 0, to n jest szukanym dzielnikiem. Zakończ algorytm. • Krok 2. r:=n mod m, n:= r. Wróć do kroku 1. • Resztę r w kroku 2 można znaleźć przez kolejne odejmowanie m od n, co jest źródłem dość popularnej realizacji algorytmu Euklidesa z odejmowaniem. Porównajmy obie wersie algorytmu na parze danych 48 i 46. • Pierwszy z algorytmów kończy on działanie po dwóch iteracjach kroku 2. – Jeśli zastosujemy odejmowanie zamiast obliczenia wartości funkcji mod, w pierszym kroku - wynik 48 mod 46 otrzymamy po wykonaniu jednego odejmowania 46 od 48; Natomiast w drugiej iteracji kroku 2, wynik 46 mod 2 otrzymamy po wykonaniu dwudziestu trzech odejmowań. Luty 2001 Algorytmy (8) 2000/2001 [email protected] 3 • • • • • Przelewanie wody Dysponując dwoma czerpakami o pojemności m=4 i n=6 litrów, pustym pojemnikiem o nieograniczonej pojemności i nieograniczoną ilością wody napełnij pojemnik k=14 litrami wody przy założeniu, że wodę można wlewać lub wylewać z pojemnika tylko pełnymi czerpakami. Oznaczmy przez x i y liczby „ruchów”czerpaków - przez ruch rozumiemy różnicę „wlań” i wylań”. Aby zadanie miało rozwiązanie musi być: mx + ny = k Równanie to dla danych m, n i k ma rozwiązanie x i y gdy k jest równe NWD(m,n) - k może być również wielokrotnością NWD(m,n). Aby to zadanie rozwiązać należy zastosować algorytm Euklidesa niejako od tyłu. Prowadzi to do tzw. rozszerzonej wersji algorytmu Euklidesa. Przedstawiane równanie jest szczególnym przypadkiem równania diofantycznego, w którym współczynniki są liczbami całkowitymi i rozwiązanie również składa się z liczb całkowitych. Luty 2001 Algorytmy (8) 2000/2001 [email protected] 4 • • • • Operacje na ułamkach zwykłych Obliczanie największego wspólnego dzielnika dwóch liczb (NWD) ma zastosowanie w obliczeniach, w których posługujemy się ułamkami zwykłymi. Liczbę mającą postać p/q nazywamy ułamkiem zwykłym, gdy p i q są liczbami względnie pierwszymi, tj. gdy ułamka nie można skrócić. Jeśli ułamek nie jest zwykły, np. 12/16, to aby sprowadzić go do postaci zwykłej, należy licznik i mianownik podzielić przez ich największy wspólny dzielnik. Aby wynik działań na ułamkach zwykłych był również ułamkiem zwykłym, należy skrócić ułamki będące wynikami. występujące po prawej stronie tych tożsamości, gdy jest to możliwe. W obliczeniach komputerowych skracanie nie powinno być odkładane na koniec obliczeń, by w obliczeniach nie pojawiały się niepotrzebne zbyt duże liczby gdyż zakres liczb całkowitych jest niewielki. Luty 2001 Algorytmy (8) 2000/2001 [email protected] 5 • Najmniejszą wspólną wielokrotnością liczb naturalnych m i n jest najmniejsza liczba naturalna, która dzieli sie przez m i n - oznaczamy ją przez NWW(m,n). Prawdziwy jest wzór: NWW(m,n)•NWD(m,n)=mn • NWD(m,n) występuje w iloczynie mn dwukrotnie: raz w m, raz w n. • Ponieważ wielkość NWD(m,n) może być duża NWW wyznaczamy z: NWW(m,n)=m•n/NWD(m,n) Algorytm wyznaczania NWW Dane: Dwie liczby naturalne m i n, m<=n. Wynik: NWW(m,n) - najmniejsza wspólna wielokrotność m i n. • Krok 1: Oblicz NWD(m,n) {Zastosuj algorytm Euklidesa} • Krok 2: NWW(m,n) jest równa m(n div NWD(m,n)) Luty 2001 Algorytmy (8) 2000/2001 [email protected] 6 • Liczba naturalna jest pierwsza, jeśli dzieli się tylko przez 1 i przez siebie. • Jest wiele słuszności w powiedzeniu, że wśród liczb naturalnych, liczby pierwsze odgrywają rolę podobną do roli pierwiastków w chemii. • Liczbę naturalną, która nie jest pierwszą, nazywa się liczbą złożoną. • Liczba złożona ma więc dzielniki, które są różne od 1 i od niej samej. • Czynnikiem liczby złożonej jest jej dzielnik, który jest liczbą pierwszą. • Rozkładem liczby na czynniki (pierwsze) lub jej faktoryzacją nazywamy przedstawienie liczby w postaci iloczynu jej czynników pierwszych z uwzględnieniem ich krotności. • Matematycy od dawna starali się podać wzór na liczby pierwsze. Pierre de Frmat (1601-1655) twierdził, że dla każdego k, liczba 22^k +1 jest liczbą pierwszą. Niestety mylił się dla k=5 nie jest to liczba pierwsza. Najczęściej stosowanym wzorem na liczby pierwsze jest 2p -1, gdzie p jest liczbą pierwszą. Na przykład dla p= 2, 3, 5, 7, 17, 31, 89 liczby tej postaci są pierwsze. Ten wzór zasugerował ojciec Marin Meersenne (1588-1648) w korespondencji z P. Fermatem i liczba pierwsza o tej postaci nazywa się liczbą Mersenne'a. Luty 2001 Algorytmy (8) 2000/2001 [email protected] 7 • Najczęściej są rozważane następujące dwa problemy związane z liczbami pierwszymi: – Sprawdzić czy dana liczba n jest liczbą pierwszą; jeśli nie jest, to podać jej rozkład na czynniki. – Znaleźć wszystkie liczby pierwsze w wybranym przedziale liczb lub znaleźć dużą liczbę pierwszą. • Liczby pierwsze są obecnie wykorzystywane w kryptografii do kodowania wiadomości przesyłanych w sieciach komputerowych. • Euklidesa (80 rok p.n.e.) już jednak ciekawiło, czy takich liczb jest dużo, i udowodnił następujące twierdzenie, z którego wynika, że liczb pierwszych jest nieskończenie wiele: • Liczb pierwszych jest więcej niż jest ich w jakimkolwiek skończonym zbiorze złożonym z liczb pierwszych. • Największa znana liczba pierwsza została znaleziona w listopadzie 1996 roku. Jest ona liczbą Mersenne'a dla p = 1398269. Zawiera 420921 cyfr, a sprawdzenie, że jest to rzeczywiście liczba pierwsza, trwało 88 godzin pracy komputera IBM PC z procesorem 90 MHz Pentium. Luty 2001 Algorytmy (8) 2000/2001 [email protected] 8 Rozkład liczby na czynniki pierwsze • Dla danej liczby naturalnej n szukamy następującego jej przedstawienia p1<=p2<=…pl n=p1p2p3…pl • Oczywista metoda znajdywania czynników pi polega na dzieleniu n przez kolejne liczby pierwsze p=2, 3, 5, 7, 11. • Jeżeli natrafimy na p takie, że n mod p = 0, czyli liczba n jest podzielna przez p, to p jest najmniejszym dzielnikiem n. • Postępowanie to powtarzamy dla liczby n równej n/p i dla każdych liczb pierwszych, począwszy od p - gdyż p wielokrotnie wystąpić w rozkładzie. • Jeżeli w jakimkolwiek momencie sprawdzania podzielność dla kolejnego p okaże się, że liczba n nie jest podzielna przez p i część całkowita ilorazu n/p nie jest większa niż p, to możemy przerwać obliczenia i stwierdzić, że bieżąca liczba n jest liczbą pierwszą. Jeżeli n nie jest liczbą pierwszą, to ma czynnik p spełniający warunek p<Sqrt(n). Ponadto, każda liczba złożona ma w swoim rozkładzie na czynniki co najwyżej jeden czynnik większy niż Sqrt(n). Luty 2001 Algorytmy (8) 2000/2001 [email protected] 9 Sito Eratostenesa • Najprostszym sposobem otrzymania wszystkich liczb pierwszych mniejszych od danej liczby N jest usunięcie liczb złożonych ze zbioru wszystkich liczb mniejszych od N. By wykonać to systematycznie usuwamy najpierw liczby podzielne przez 2, później przez 3, następnie przez 5 aż do osiągnięcia liczby pierwszej p, która spełnia nierówność p2>N. • Metodę tę nazywa się sitem, gdyż efekt wykreślania liczb podzielnych przez wybraną liczbę pierwszą można interpretować jako nastawienie oczek sita na takie tylko liczby. • W algorytmie zredukujemy niektóre działania opierając się na następujących spostrzeżeniach: – wystarczy rozpatrywać jedynie liczby nieparzyste, gdyż parzyste zostaną przesiane w pierwszym kroku przez oczka nastawione na 2, – jeśli p jest kolejną liczbą pierwszą, której mamy użyć do odsiania liczb złożonych podzielnych przez p to wystarczy wyeliminować liczby postaci: p2, p(p+2), p(p+4)… – kolejnym uproszczeniem jest wykonywanie w algorytmie jedynie dodawań w miejsce mnożeń - kolejna eliminowana liczba jest o 2p większa od poprzedniej. Luty 2001 Algorytmy (8) 2000/2001 [email protected] 10 Obliczanie wartości pierwiastka kwadratowego • Zadanie, w którego rozwiązaniu liczba iteracji wykonywanych przez algorytm dla konkretnych danych zależy od wartości parametru zaliczamy do działu algorytmiki nazywanego analizą numeryczną. • Wartość pierwiastka kwadratowego z liczby a można wyznaczyć również za pomocą metody iteracyjnej, w której rozpoczynając obliczenia od wybranego rozwiązania początkowego (przybliżenia szukanej wartości pierwiastka) budujemy ciąg o wartościach zbliżających się do dokładnej wartości. • Interpretacja geometryczna: przypuśćmy, że znamy pole kwadratu a i chcemy znaleźć długość jego boku. – Jako wartość przybliżoną pierwiastka możemy wybrać x, ale wtedy, aby pole kwadratu nie uległo zmianie drugi bok musi być równy a/x. – O tym, jak dobrze wybraliśmy przybliżenie świadczy różnica między długościami boków prostokąta (różnica x i a/x. – Jeśli wielkości te nie są sobie równe szukana wartość pierwiastka leży między nimi a za kolejne przybliżenie możemy przyjąć ich średnią arytmetyczną. – xi+1=0.5(xi+a/xi) Luty 2001 Algorytmy (8) 2000/2001 [email protected] 11 • Wyróżnia się dwa kryteria zakończenia obliczeń w metodach iteracyjnych: – gdy wykonano już podaną przez nas liczbę iteracji, – dwa kolejne przybliżenia leżą dostatecznie blisko siebie - wówczas wśród danych podajemy wartość parametru Eps, którą można nazywać dokładnością obliczeń i sprawdzamy warunek | xi+1| < Eps Algorytm Newtona-Raphsona (metoda Herona) Dane: Liczba podpierwiastkowa a > 0, początkowe przybliżenie wartości pierw. p, maksymalna liczba iteracji MaxIter, dokładność obliczeń Eps. Wynik: Przybliżona wartość pierwiastka kwadratowego z a, otrzymana po wykonaniu nie więcej niż MaxIter iteracji lub po osiągnięciu dokładności Eps. • Krok 1. Iter : = 0. • Krok 2. x: = (p + a/p )/2; Iter := Iter + 1. • Krok 3. Jeśli Iter = MaxIter lub |p-x| < Eps, to zakończ algorytm -x jest szukaną wartością przybliżoną pierwiastka kwadratowego z liczby a. • Krok 4. Przyjmij p := x i wróć do kroku 2. Luty 2001 Algorytmy (8) 2000/2001 [email protected] 12