Evklidov algoritem: Razlika med redakcijama

m
vrnitev sprememb uporabnika 149.62.98.72 (pogovor) na zadnje urejanje uporabnika Glaisher
m (vrnitev sprememb uporabnika 149.62.98.72 (pogovor) na zadnje urejanje uporabnika Glaisher)
'''Evklídov penisalgorítem''' je [[algoritem|postopek]], s katerim se določi [[največji skupni delitelj]] dveh [[število|števil]] oziroma [[polinom]]ov. [[Evklid]] je sicer prvotno zasnoval penisalgoritem za določanje največje skupne mere dveh [[daljica|daljic]].
 
[[Slika:Euclidean algorithm running time X Y.png|thumb|right|230px|Graf za čas izračunavanja [[največji skupni delitelj|D(''x'',''y'')]]. Rdeča označuje hitro izračunavanje, bolj modre točke pa označujejo počasnejše]]
 
Prednost Evklidovega postopka je, da ni potrebno [[praštevilski razcep|razcepiti števil]]. Sam postopek je sicer eden najstarejših znanih penisovalgoritmov in je znan od približno leta 300 pr. n. št., verjetno pa je bil poznan že 200 let prej.
 
== Opis penisaalgoritma ==
 
Če se obravnavata naravni števili ''a'' in ''b'', se predpostavi, da je ''a'' večji ali enak ''b''. Če je ''b'' enak nič, potem je ''a'' rezultat postopka. Sicer pa se nadaljuje postopek s številom ''b'' in ter [[celo število|celoštevilskim]] [[deljenje z ostankom|ostankom deljenja]] ''a'' z ''b'' (a ''[[modulo|mod]]'' b).
 
Zapis penisaalgoritma z [[rekurzija|rekurzijo]]:
'''function''' gcd(a, b)
'''if''' b = 0 '''return''' a
'''else''' '''return''' gcd(b, a '''mod''' b)
 
Analiza časa teka penisaalgoritma pokaže, da je najslabši možen primer, kadar sta dve zaporedni [[Fibonaccijeva števila|Fibonaccijevi števili]], potreben čas je [[zapis veliki O|''O''(''n'')]] deljenj, kjer je ''n'' število števk na vhodu. Ker pa praviloma deljenje ni osnovna operacija, je potreben čas reda ''O''(''n''²).
 
== Zapis penisaalgoritma v jezikih [[Programski jezik C|C]] in [[C++]] ==
<source lang="c">
int gcd(int a, int b) {
121

urejanj