Zatoowanie algoytmu Euklidea Pzelewanie wody Dyonujez dwoma czeakami o ojemnościach 4 i 6 litów, utym ojemnikiem o nieoganiczonej objętości i nieoganiczoną ilością wody Podaj oób naełnienia ojemnika 14 litami wody, zy czym wodę możez wlewać do ojemnika lub wylewać z niego tylko ełnymi czeakami Rozwiązanie: [0,0,0] -> [4,0,0] -> [0,0,4] -> [4,0,4] -> [0,0,8] -> [0,6,8] -> [0,0,14] Czyli znaleźliśmy ozwiązanie o 6 uchach Uogólniając ytamy, czy dla każdych watości ojemności czeaków i ojemnika itnieje ozwiązanie? Pzyjmijmy, że czeaki moją odowiednio ojemności m oaz n Natomiat ojemnik ma watość k Szukamy wówcza ozwiązania ównania: m*x + n*y k (*) gdzie x i y to liczby całkowite okeślające ilość zelewań czeakami m oaz n Szukaliśmy ozwiązania ównania: 4*x + 6*y 14 Łatwo zaobewować, że owyżze ównanie ma ozwiązanie, ale gdyby ojemnik miał zawieać 15 litów, wówcza ównanie 4*x + 6*y 15 nie oiadałoby ozwiązania Wnioek: Dla zadanych m,n i k ównanie (*) ma ozwiązanie x i y tylko wtedy, gdy k jet ówne NWD(m,, lub jet jego wielokotnością Pzyjzyjmy ię algoytmowi Euklidea Załóżmy, że n<m Gdy n odzielimy zez m, otzymamy natęującą ówność: n *m + gdzie ezta, 0<<m (**) i ą odowiednio iloazem i eztą Najitotniejzy wnioek, ozwalający na znalezienie NWD oiea ię dalej na odtawieniu: NWD(m,NWD(,m) N m46, n48: Z ównania (**) mamy: 481*46+2 2 4623*2+0 NWD(46,48)NWD(2,46)NWD(0,2), czyli NWD(46,48)2 Pześledźmy znajdowanie NWD na natęnym zykładzie: m12, n21 Stoując ównanie (**) znajdujemy najiew NWD:
21 1*12 + 9 (1) 12 1 *9 + 3 (2) 9 3*3 + 0 (3) Stąd NWD(12,21)3 Aby otzymać ówność (*) dokonajmy zekztałceń owyżzego ozwiązania: Z (2): 12 1*9 3 Z (1): 9 21 1*12 Podtawiamy 1 do 2: 12 1*(21-1*12) 3 2*12-1*21 3 a więc 2*m-1*n 3 Można zaiać w otaci iteacji kolejne koki algoytmu Euklidea: a 0 1 *a 1 +a 2 a 1 2 *a 2 +a 3 a l+1 l *a l +a l+1 gdzie zyjęliśmy: a 0 n, a 1 m oaz a l+10, czyli a lnwd(m, Szukamy zatem ozwiązania ównania: NWD(m,mx+ny W tym celu algoytm będzie twozył ównież dwa odciągi liczb x 0,x 1,,x l oaz y 0,y 1,,y l ełniające ówność: a i mx i +ny i dla i0,1,2,,l (***) Czyli dla il otzymamy: a l NWD(m,mx l +ny l Zatem o zakończeniu algoytmu, końcowe watości elementów ciągów a i, x i oaz y i będą tanowić ozwiązanie ównania : mx+nyk Okeślmy teaz oób wyznaczenia elementów ciągów x i oaz y i Z dwóch iewzych iteacji algoytmu Euklidea otzymamy ich oczątkowe watości: n a 0 mx 0 + ny 0 czyli x 0 0, y 0 1, m a 1 mx 1 +ny 1 czyli x 1 1, y 1 0 Natomiat, gdy kozytamy z ówności,w algoytmie Euklidea a i+1 a i-1 - i a i i wtawimy do niej watości a i-1 oaz a i wówcza otzymamy: a i+1 a i-1 i a i mx i-1 + ny i-1 i (mx i + ny i ) m(x i-1 i x i ) + n(y i-1 i y i ) Poównując ównanie z zależnością (***) dla i+1 twiedzimy: x i+1 x i-1 - i x i oaz y i+1 y i-1 - i y i To kończy definiowanie a i, x i, y i
W tabeli zedtawione ą watości kolejnych elementów tych ciągów dla zykładu: m12 oaz n21 m 12 n 21 i a[i] [i] x[i] y[i] 0 21 0 1 1 12 1 1 0 2 9 1-1 1 3 3 3 2-1 4 0 Algoytm Euklidea weja ozzezona: Dane: Wyniki: Kok 1 Kok 2 Kok 3 Dwie liczby natualne m i n, m<n Najwiękzy wólny dzielnik m i n, NWD(m, oaz ozwiązanie -nia: xm+ynk, gdzie knwd(m, {Pzyianie watości oczątkowych} an; a m; x0; y1; x 1; y 0 Jeśli a 0, to anwd(m, oaz x i y tanowią ozwiązanie -nia: x*m+y*nk, gdzie knwd(m, zakończ algoytm Wykonaj zyiania: a div a ; {div dzielenie całkowite bez ezty} tema ; a a *a ; atem; {tem zmienna omocnicza} temx ; x x *x ; xtem; temy ; y y *y ; atem; Kok 4 Wóć do koku 2 Działania na ułamkach Do nazych działań zyjmujemy ułamek zwykły otaci, gdzie i ą liczbami względnie iewzymi oaz >0 Podtawowe działania aytmetyczne na ułamkach zwykłych: ± ± ; ; : Aby wyniki tych działań były ównież ułamkami zwykłymi, należy kócić ułamki wytęujące o awej tonie tożamości, gdy to jet możliwe W ogamie komuteowym kacanie ułamków zeowadzamy w takcie wykonywania obliczeń, a nie na końcu Dzięki
temu unikamy dużych liczb w takcie obliczeń W takcie działań zydatna może być funkcja NWW(m, najmniejza wólna wielokotność Najmniejzą wólną wielokotnością liczb natualnych m i n jet najmniejza liczba natualna, któa dzieli ię zez m i n Oznaczamy ją NWW(m, Pawdziwy jet związek: NWW ( m, m n NWD( m, Aby uniknąć dużego licznika w wyażeniu na NWW, możemy go także zedtawić w otaci: n NWW ( m, m NWD( m, Algoytm obliczania najmniejzej wólnej wielokotności dwóch liczb Dane: Wyniki: Kok 1 Kok 2 Dwie liczby natualne m i n, m<n NWW(m, Oblicz NWD(m, {Zatouj w tym celu algoytm Euklidea} NWW(m, jet ówna m*(n div NWD(m,) Dodawanie ułamków (odejmowanie będzie wyglądało odobnie) Obliczamy najiew NWD(, ) Jeśli 1, to wyniku dodawania nie można kócić Jeśli >1, to obliczamy Wówcza: t + NWD( t, ) + + t (( )( )) Sawdźmy na zykładzie - metodą tadycyjną: 15 52 + 19 12 180 + 988 624 1168 624 - metodą oianą owyżej: 73 39 NWD(52,12)4, t15*3+19*13292, NWD(292,4)4 Stąd, 15 19 (294 4) 73 + 52 12 ((52 4)(12 4)) 39
Jak widać w dugim zyadku wytąiły mniejze liczby w takcie obliczeń Mnożenie i dzielenie ułamków Ponieważ i oaz i ą aami liczb względnie iewzych, mamy więc NWD(, ), gdzie NWD(, ) i NWD(, ) Wynika tąd: Podobnie z dzieleniem: NWD(, ) i NWD( ) Wówcza zy ełnieniu waunku >0: : Liteatua: Algoytmy M M Syło wyd WSiP