Algorytm Euklidesa
Transkrypt
Algorytm Euklidesa
(C)2005 RoG@j 2005-03-30 Definicja problemu Algorytm Euklidesa Problem znajdywania NWD Algorytm Euklidesa Wersja z dzieleniem Wersja z odejmowaniem Dlaczego Euklides? ! 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 – jak to działa? ! ! ! Alg 24 Załóżmy, że n > m; gdy podzielimy n przez m, otrzymamy równość n = q·m + 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. ! ! ! ! Dane są dwie liczby naturalne 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. Historia raz jeszcze… ! ! ! Algorytm ten Euklidesa zamieścił w swoim wiekopomnym dziele Elementy 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, ale nie zawierają one w sobie iteracji Początek algorytmu… ! ! Jeśli r <> 0, to równość można zapisać w postaci r = n - q·m; 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 NWD(m,n)=NWD(r,m) Ponieważ r<m pierwszy element w parze argumentów w funkcji NWD maleje 1 (C)2005 RoG@j Kolejne przymiarki… ! ! 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 UWAGA: iloraz q nie występuje w kolejnych iteracjach, nie trzeba go zatem wyznaczać. Realizacja w VBA If m <> 0 Then Do r = n Mod m n = m m = r Loop Until r = 0 End If Wersja z odejmowaniem ! ! Alg 24 Resztę r można znaleźć przez kolejne odejmowanie m od n, co jest źródłem realizacji algorytmu Euklidesa z odejmowaniem Jeśli obliczymy np. NWD(48,46) to łatwo zauważyć, że wersja z odejmowaniem wymaga często większej liczby operacji 2005-03-30 Algorytm „step-by-step” ! ! ! ! Dane: Liczby naturalne m i n (m<=n) Wynik: NWD(m,n) Krok 1: Jeśli m=0 to NWD=n Krok 2: Powtarzaj wracając do kroku 1 r:=n mod m n=m m=r Nieco inna realizacja w VBA Do While n <> 0 r = m m = n n = r Mod n Loop Sub NWD_Mod() Dim m As Long Dim n As Long Dim r As Long m = InputBox("m") n = InputBox("n") ... MsgBox m End Sub Realizacja w VBA Do Until (m = n) If (m > n) Then m = m - n Else n = n - m End If Loop Sub NWD_Odejm() Dim m As Long Dim n As Long m = InputBox("m") n = InputBox("n") … MsgBox m End Sub 2