90 likes | 340 Views
Eiklīda algoritms. Divu veselu skaitļu lielākā kopīgā dalītāja (LKD) vērtības noteikšana. Daugavpils Valsts ģimnāzija Edgars Pudulis. Nedaudz no vēstures faktiem.
E N D
Eiklīda algoritms Divu veselu skaitļu lielākā kopīgā dalītāja (LKD) vērtības noteikšana Daugavpils Valsts ģimnāzija Edgars Pudulis
Nedaudz no vēstures faktiem Eiklīds šī algoritma uzdevumu sākotnēji formulēja ģeometriski – kā divu nogriežņu lielākā kopīgā mēra atrašanu. Tādā gadījumā no garākā nogriežņa tika atņemts īsākais, tad atlikums tika atņemts no īsākā nogriežņa u.t.t. Šādā formā algoritms parādījās Eiklīda "Elementos" apmēram 300 g. p.m.ē. Tomēr, iespējams, ka tas jau bija zināms līdz pat 200 gadiem agrāk. Piemēram, Aristotelis devis mājienu par šo algoritmu savā grāmatā "Tēmas" (Τοπικων/Topica) apmēram 330 g. p.m.ē.
Algoritma darbības princips Eiklīda algoritms skaitļu teorijā ir paņēmiens divu veselu skaitļu lielākā kopīgā dalītāja (LKD) atrašanai, vispirms nepilni izdalot lielāko skaitli ar mazāko un tad katrā nākamajā solī iepriekšējās darbības dalītāju savukārt dalot ar iegūto atlikumu. LKD ir pēdējais iegūtais nenulles atlikums. Ievērojami ir tas, ka algoritmam nav nepieciešams sadalīt skaitļus pirmreizinātājos, kā arī tas, ka šis ir viens no vecākajiem zināmajiem algoritmiem.
Darbības piemērs • LKD(336,287) = ? • 336 : 287 = 1 atl. 49 • 287 : 49 = 5 atl. 42 • 49 : 42 = 1 atl. 7 • 42 : 7 = 6 atl. 0 • LKD(336,287) = 7
Algoritma pamatelementi uses crt; var pirmais, otrais,atlikums:integer; Begin write('Ievadiet pirmo skaitli ');read(pirmais); write('Ievadiet otro skaitli ');read(otrais); {LOĢISKĀ DAĻA} write(otrais); readln; end. Definējam trīs mainīgos elementus – divus skaitļus un vienu vērtību, kas saturēs šo divu skaitļu dalījuma atlikumu. Ievadām skaitļu vērtības
Algoritma loģiskā daļa Tik ilgi, kamēr pirmo skaitli dalot ar otro atlikums nav 0, dari: while (pirmais mod otrais <>0) do begin atlikums:=pirmais mod otrais; pirmais:=otrais; otrais:=atlikums; end; Aprēķinām atlikumu Par dalāmo izvēlamies iepriekšējo otro skaitli Par dalītāju izvēlamies iepriekšējo atlikumu
Algoritms uses crt; var pirmais, otrais,atlikums:integer; Begin write('Ievadiet pirmo skaitli ');read(pirmais); write('Ievadiet otro skaitli ');read(otrais); while (pirmais mod otrais <>0) do begin atlikums:=pirmais mod otrais; pirmais:=otrais; otrais:=atlikums; end; write(otrais); readln; end. Kad tiek dalīts pēdējo reizi un atlikums ir 0, mainīgais otrais satur pēdējo atlikuma vērtību, kas arī ir šo skaitļu LKD.