Lab 06 2011 2012 NWD

background image

Największy Wspólny Dzielnik NWD – dowód poprawności Algorytmu Euklidesa

Największy wspólny dzielnik liczb naturalnych a, b oznaczamy przez NWD(a,b).
Własności (bardzo łatwe do udowodnienia):
Lemat
1.
NWD(a,a)=a
2. NWD(a,b)=NWD(ab,b) jeśli a > b
3. NWD(a,b)=NWD(a,ba) jeśli a < b

Dowód (tylko wariantu 2).
Niech a > b oraz niech

(

)

,

K

K

K

NWD a b

a

a

K

b

b

K

=

⇒ =

∧ =

, gdzie

,

0

K

K

a

b > ,

K

K

a

b

>

, przy czym

0

K > jest

największą liczbą o tej własności oraz niech

(*)

(

)

,

L

L

L

NWD a b b

a b

c

L

b

b

L

=

⇒ − =

⋅ ∧ =

, gdzie

,

0

L

L

c b > , przy czym

0

L > jest

największą liczbą o tej własności.

(**)

Z (*) wynika, że

(

)

K

K

a b

a

b

K

− =

stąd K dzieli ab (oraz oczywiście K dzieli b).

A zatem na pewno

K

L

≤ na mocy (**).

Z (**) wynika, że

(

)

L

L

a

a b b

c

b

L

= − + =

+

stąd

L dzieli a (oraz oczywiście L dzieli b).

A zatem na pewno

L

K

na mocy (*).

Stąd

K

L

= .

CND.

Algorytm Euklidesa

start

naturalne

a, b, nwd, A, B ;

czytaj

a ;

czytaj

b ;

A = a ;
B = b ;
dopóty dopóki

a

b

≠ wykonuj

jeśli

a

b

> to a a b

= − ;

w przeciwnym przypadku

b

b a

= − ;

nwd = a ;
wyświetl

A ;

wyświetl

B ;

wyświetl

nwd ;

koniec


Rozpatrzmy funkcję zdaniową

(

)

,

P a b

zdefiniowaną następująco:

(

)

(

)

(

)

,

0

0

,

,

P a b

a

b

NWD a b

NWD A B

=

> ∧ > ∧

=

gdzie a, b, A, B są identyfikatorami zmiennych zdefiniowanych w

Algorytmie Euklidesa

Dowód poprawności algorytmu sprowadza się do stwierdzenia, że funkcja zadaniowa

(

)

,

P a b

jest prawdziwa w każdym kroku algorytmu oraz, że liczba kroków algorytmu

jest liczbą skończoną.


background image

Dowód (por. np. Turski W.M., Propedeutyka Informatyki, PWN).
Bezpośrednio przed rozpoczęciem iteracji funkcja

(

)

,

P a b

jest oczywiście prawdziwa pod

warunkiem, że wczytamy liczby naturalne a i b.
Iteracja jest wykonywana pod warunkiem, że a

b

≠ , czyli mamy albo przypadek a b

> albo

przypadek a

b

< .

Jeśli a

b

> , to działanie wykonywane w obrębie iterowanej instrukcji nie zmieni b, natomiast

a pozostanie dodatnie. Ponadto będzie prawdziwa relacja

(

)

(

)

,

,

NWD a b

NWD A B

=

na mocy

Lematu (wariant 2). A zatem wartość logiczna funkcji

(

)

,

P a b

będzie prawdą.

Podobne rozumowanie przeprowadzamy dla przypadku a

b

< .

Iteracja może zakończyć się tylko w przypadku kiedy a

b

= , przy czym zawsze będzie

spełniony warunek

0

0

a

b

> ∧ > . A zatem funkcja

(

)

,

P a b

także i w tym szczególnym

przypadku będzie miała wartość logiczną prawda (mówimy wtedy, że funkcja

(

)

,

P a b

jest

niezmiennikiem iteracji). Instrukcje, które następują po instrukcji pętli nie mają już wpływu
na wartość logiczną funkcji

(

)

,

P a b

.

Zauważmy

ponadto,

że

jeśli

a

b

= , to na mocy Lematu (wariant 1)

( , )

( , )

NWD a b

NWD a a

a

=

= i skoro funkcja

(

)

,

P a b

jest prawdziwa w każdym kroku

algorytmu (jak to zostało wykazane wyżej), więc

( , )

NWD A B

a

nwd

= =

(po podstawieniu a

do nwd ).
Pozostaje jeszcze do udowodnienia, że iteracja musi się zakończyć, ale zauważmy, że wobec
zmniejszania liczby dodatniej o liczbę dodatnią w taki sposób, że wynik zawsze pozostaje
dodatni, nie jest zatem możliwe (wobec założonej skończoności wczytywanych liczb a i b)
aby instrukcje te mogły być powtarzane nieskończoną liczbę razy.
CND.


Wyszukiwarka

Podobne podstrony:
Lab 06 2011 2012
Lab 06 2011 2012
Lab 02 2011 2012
Lab 09 2011 2012
Lab 10 2011 2012
Lab 05 2011 2012
Lab 04 2011 2012
Lab 09 2011 2012
Lab 03 2011 2012
Lab 03 2011 2012
Lab 08 2011 2012
Lab 07 2011 2012 Suplement
Lab 02 2011 2012
Lab 09 2011 2012

więcej podobnych podstron