New Immissions/Updates:
boundless - educate - edutalab - empatico - es-ebooks - es16 - fr16 - fsfiles - hesperian - solidaria - wikipediaforschools
- wikipediaforschoolses - wikipediaforschoolsfr - wikipediaforschoolspt - worldmap -

See also: Liber Liber - Libro Parlato - Liber Musica  - Manuzio -  Liber Liber ISO Files - Alphabetical Order - Multivolume ZIP Complete Archive - PDF Files - OGG Music Files -

PROJECT GUTENBERG HTML: Volume I - Volume II - Volume III - Volume IV - Volume V - Volume VI - Volume VII - Volume VIII - Volume IX

Ascolta ""Volevo solo fare un audiolibro"" su Spreaker.
CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Algorytm Euklidesa - Wikipedia, wolna encyklopedia

Algorytm Euklidesa

Z Wikipedii

Algorytm Euklidesa (metoda kolejnych dzieleń) to algorytm znajdowania największego wspólnego dzielnika (NWD) dwóch różnych liczb naturalnych. Nie wymaga rozkładania liczb na czynniki pierwsze.

Co ciekawe algorytmu nie wymyślił Euklides, a Eudoksos z Knidos (IV wiek p.n.e.). Euklides jedynie algorytm ten zawarł w swoim dziele Elementy.

Spis treści

[edytuj] Algorytm

Przebieg algorytmu Euklidesa obliczania NWD liczb a i b:

  1. oblicz c jako resztę z dzielenia a przez b
  2. zastąp a przez b, zaś b przez c
  3. jeżeli b = 0, to szukane NWD = a, w przeciwnym wypadku przejdź do 1

[edytuj] Zapis w pseudokodzie

  NWD(liczba całkowita a, liczba całkowita b)
  {        
       dopóki b != 0
       {
           c := b
           b := a mod b        
           a := c 
       }          
       
  zwróć a
  }

[edytuj] Definicja rekurencyjna

NWD(a,b)=\begin{cases} a & \mbox{ dla }b=0 \\ NWD(b, a\mbox{ mod }b) & \mbox{ dla }b\ge1 \end{cases}

[edytuj] Przykłady

[edytuj] Obliczanie NWD

Obliczenie największego wspólnego dzielnika liczb

a b Wywołanie
NWD 1071 1029 Wartości początkowe
= NWD 1029 42 NWD(1071, 1029)\ =\ NWD(1029, 1071\ mod\ 1029\ =\ 42)
= NWD 42 21 NWD(1029, 42)\ =\ NWD(42, 1029\ mod\ 42\ =\ 21)
= NWD 21 0 NWD(42, 21)\ =\ NWD(21, 42\ mod\ 21\ =\ 0)
21 NWD(1071,1029)\ =\ 21

[edytuj] Sprawdzenie, czy liczby są względnie pierwsze

Liczby 46406 i 36957 są względnie pierwsze, co można pokazać następująco:

a             b

46406 36957
36957 9449
9449 8610
8610 839
839 220
220 179
179 41
41 15
15 11
11 4
4 3
3 1
1 0

[edytuj] Rozszerzony algorytm Euklidesa

Jeśli przechowywana będzie informacja o kolejnych ilorazach, to będzie też można wyznaczyć liczby naturalne w równaniu a*p + b*q = NWD (a, b). Ta metoda nazywana jest rozszerzonym algorytmem Euklidesa. Następująca implementacja w JavaScripcie powinna działać w większości przeglądarek.

// Ten program działa wyłącznie dla danych nieujemnych

// Pobierz dane użytkownika i zamień ciągi znaków na liczby
var a = parseInt(prompt("Wprowadź nieujemną wartość a",0))

var b = parseInt(prompt("Wprowadź nieujemną wartość b",0))

// Zachowaj pierwotne wartości.
a0 = a;
b0 = b;

// Inicjalizacja. Utrzymujemy niezmienniki p*a0 + q*b0 = a oraz r*a0 + s*b0 = b
p = 1; q = 0;
r = 0; s = 1;

// algorytm:
while (b != 0) { 
  c = a % b;
  quot = Math.floor(a/b);  //W JavaScripcie nie ma operatora dzielenia całkowitego
  a = b;
  b = c;
  new_r = p - quot * r; new_s = q - quot * s;
  p = r; q = s;
  r = new_r; s = new_s;
}

// Pokaż wynik.
alert("NWD(" + a0 + "," + b0 + ")=" + a + "
" + p + "*" + a0 + "+(" + q + ")*" + b0 + "=" + a)

[edytuj] Dowód poprawności

Poprawność algorytmu Euklidesa można dowieść, pokazując, że zdanie:

NWD(a,b)=NWD(b,a\ mod\ b)

jest niezmiennikiem pętli algorytmu NWD (jest prawdziwe dla dowolnych a i b).

Ponieważ 0\le a\ mod\ b<a wartość drugiego argumentu zmniejsza się po każdej iteracji, więc algorytm zawsze zakończy działanie.

Z niezmiennika pętli wynika:

NWD(a,b)=NWD(b,a\ mod\ b=c)=NWD(c,b\ mod\ c)=\cdots=
=NWD(z,0)=z\

A więc, po ostatnim przebiegu pętli algorytm NWD zwróci wartość NWD(a, b).

[edytuj] Złożoność czasowa

Dla dowolnych liczb m>n\ge 0 algorytm Euklidesa zwraca wartość NWD(m, n) po co najwyżej 2\cdot log_2\ (m+n) przebiegach pętli.

Dowód:

  • Lemat: Jeśli a\ge b to
(1) b\ +\ a\ mod\ b\ <\ \frac{2}{3}\cdot (a+b)

(1) jest równoważne b\ +3\ \cdot (a\ mod\ b)<2a

Podstawiając

a=b\cdot (a\ div\ b)\ +\ a\ mod\ b

otrzymuje się:

b\ +\ a\ mod\ b\ <\ 2b\cdot (a\ div\ b)

I ponieważ a\ge b to a\ div\ b\ge \ 1, oraz ponadto z własności modulo jest a\ mod\ b \le \ b mamy nierówność:

b\ +\ a\ mod\ b\ <\ 2b\ \le\ 2b\cdot (a\ div\ b)

której prawdziwość jest oczywista.

  • Przy pierwszej iteracji jest a + b = m + n, po k-tym przebiegu pętli:
a\ +\ b\le (\frac{2}{3})^k\cdot (m\ +\ n)

Ponieważ a\ +\ b\ge 1, po ostatnim, l-tym przebiegu pętli będzie:

1\le (\frac{2}{3})^l\cdot (m\ +\ n)
(\frac{3}{2})^l\le m\ +\ n
log_2\ (m\ +\ n) \ge l\cdot log_2\ \frac{3}{2} > \frac{1}{2}\cdot l
l\ <\ 2\cdot log_2\ (m\ +\ n)

[edytuj] Ciekawostki


[edytuj] Zobacz też

Static Wikipedia (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2006 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia February 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu