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