Евклид алгоритмы

**Евкли́д алгори́тмы** — ике бөтөн һандың иң ҙур уртаҡ бүлеүсеһен (йәки ике киҫектең уртаҡ үлсәмен) табыу өсөн эффектив алгоритм. Алгоритм уны беренсе башлап «Башланғыстар»ҙың  VII һәм X китаптарында һүрәтләгән грек математигы Евклид хөрмәтенә шулай аталған. Иң ябай осраҡта Евклид алгоритмы ыңғай бөтөн һандар парына ҡулланыла һәм, бәләкәй һандан һәм ҙур һан менән бәләкәй һандың айырмаһынан торған яңы пар барлыҡҡа килтерә. Ошо процесс һандар тигеҙ булғанға тиклем дауам итә. Табылған һан бирелгән парҙың иң ҙур уртаҡ бүлеүсеһе була ла инде.

Алгоритмдың беренсе тасуирламаһы Евклидтың  «Башланғыстар» китабында (б.э.т. яҡынса300 йыл) бирелгән, ул бөгөнгө көндә лә ҡулланылған иң боронғо һанлы алгоритм. Алгоритмдың оригиналы тик натураль һандар һәм геометрик оҙонлоҡтар (ысын һандар) өсөн тәҡдим ителгән була. Ләкин XIX быуатта ул Гаусстың бөтөн һандары кеүек башҡа типтағы һандарға  һәм бер үҙгәреүсәнле полиномдарға дөйөмләштерелә. Был хәҙергә дөйөм алгебрала евклид балдағы тигән төшөнсә барлыҡҡа килтерҙе. Һуңғараҡ Евклид алгоритмы төйөндәр һәм күп үлсәмле полиномдар кеүек башҡа математик структуралар өсөн дә дөйөмләштерелә. 
Был алгоритм өсөн күп теоретик һәм практик ҡулланылыш бар. Айырып әйткәндә, ул электрон коммерцияла киң таралған асыҡ асҡыслы RSA криптографик алгоритм өсөн нигеҙ булып тора. Алгоритмдар шулай уҡ һыҙыҡлы диофант тигеҙләмәләрен сығарғанда, өҙлөкһөҙ кәсерҙәр төҙөгәндә, Штурм методында ҡулланылалар. Евклид алгоритмы дүрт квадраттың суммаһы тураһында Лагранж теоремаһы, арифметиканың төп теоремаһы һ.б. кеүек хәҙергә һандар теорияһы теоремаларын иҫбат итеү өсөн төп инструмент булып тора.

## Тарих

Боронғо грек математиктары был алгоритмды  йәки  — «үҙ-ара алыу» тип атайҙар. Был алгоритм Евклид тарафынан асылмаған, сөнки ул  Аристотель Топигында телгә алына. Евклид «Башланғыстарында» ул ике тапҡыр — VII китапта ике натураль һандың иң ҙур уртаҡ бүлеүсеһен[1] табыу өсөн һәм X китапта ике бер төрлө дәүмәлдең иң ҙур уртаҡ үлсәмен табыу өсөн телгә алына. Ике осраҡта ла, ике киҫектең «дөйөм үлсәмен» табыу өсөн, алгоритмдың геометрик тасуирламаһы бирелә. 

Математика тарихсылары фаразлауынса, тап Евклид алгоритмы (эҙмә-эҙ үҙ-ара алыу процедураһы) ярҙамында сағыштырғыһыҙ булған дәүмәлдәрҙең (квадраттың яғы һәм диагонале, төҙөк бишмөйөштөң яҡтары һәм диагоналдәре) булыуы асыҡланған.
Әйтергә кәрәк, был фараздың етерлек документаль раҫламаһы юҡ. Ике натураль һандың иң ҙур уртаҡ бүлеүсеһен эҙләү алгоритмы боронғо ҡытайҙың туғыҙ китаптан торған Математика трактатының I китабында ла тасуирланған.
## Тасуирлама
### Бөтөн һандар өсөн Евклид алгоритмы

a и b  — бер үк ваҡытта нулгә тигеҙ булмаған бөтөн һандар булһын, ти, һәм 
:  a > b > r_1 > r_2 > r_3 > r_4 > \cdots > r_n һандар эҙмә-эҙлелеге
шулай билдәләнгән, һәр  r_k  — алдағынан алдағы һанды алдағы һанға бүлеүҙән ҡалдыҡ, әһуңғыһынан алдағы һуңғыһына ҡалдыҡһыҙ бүленә, йәғни:

: a = bq_0 + r_1,
: b = r_1q_1 + r_2,
: r_1 = r_2q_2 + r_3,
: \cdots
: r_{k-2} = r_{k-1} q_{k-1} + r_k,
: \cdots
: r_{n-2} = r_{n-1}q_{n-1}+ r_n,
: r_{n-1} = r_n q_n.

Ул саҡта ИҘУБ(*a*, *b*), **a** һәм **b**-ның иң ҙур уртаҡ бүлеүсеһе, *r*n-ға, был эҙмә-эҙлелектең һуңғы нулдән айырмалы быуынына, тигеҙ.

Шундай *r*1, *r*2, ..., *r*n-ҙың булыуы, йәғни теләһә ниндәй бөтөн **m** һәм бөтөн **n** ≠ 0 өсөн **m**-ды n-ға ҡалдыҡлы бүлеү мөмкин икәнлеге, **m** буйынса индукция ярҙамында иҫбатлана.

Был алгоритмдың урынлы булыуы түбәндәге ике раҫлауҙан килеп сыға:

*   *a* = *b*⋅*q* + *r* булһын, ул саҡта ИҘУБ(a, b) = ИҘУБ(b, r).

*  Нулдән айырмалы теләһә ниндәй **r** өсөн ИҘУБ(r, 0) = **r**  (сөнки 0 нулдән башҡа теләһә ниндәй бөтөн һанға бүленә).

### Геометрик Евклид алгоритмы

Оҙонлоҡтары **a** һәм **b** булған ике киҫек бирелһен, ти.Ҙур киҫектән бәләкәйен алабыҙ һәм ҙур киҫекте килеп сыҡҡан айырма менән алмаштырабыҙ. Был операцияны, киҫектәр тигеҙ булғанға тиклем, ҡабатлайбыҙ. Әгәр был хәл тыуһа, бирелгән киҫектәр үлсәнмәле, һуңғы табылған киҫек уларҙың иң ҙур уртаҡ үлсәме була. Әгәр уртаҡ үлсәм булмаһа, процесс сикһеҙ дауам итә. Ошондай күренештә алгоритм Евклид тарафынан тасуирланған һәм циркуль һәм линейка ярҙамында башҡарыла.

### Миҫал

Евклид алгоритмын һүрәтләү өсөн **a** = 1071 һәм **b** = 462 һандарының ИҘУБ табыуҙы ҡарайбыҙ. Тәүҙә 1071-ҙән 462-нең тапҡырлы ҡиммәтен, айырма 462-нән кәм булғанға тиклем, алабыҙ. Беҙ ике тапҡыр 462-не алабыҙ (*q*0 = 2), 147 ҡалдығы килеп сыға:  
: 1071 = 2 × 462 + 147.

Бынан һуң 462-нән 147-нең тапҡырлы ҡиммәтен, ҡалдыҡ 147-нән кәмерәк булғансы, алабыҙ. Беҙ 147-не өс тапҡыр (*q*1 = 3)) алырға тейешбеҙ, ҡалдыҡ 21 килеп сыға:
: 462 = 3 × 147 + 21.

Аҙаҡ 147-нән 21-ҙең тапҡырлы ҡиммәтен, ҡалдыҡ 21-ҙән кәмерәк булғанға тиклем, алабыҙ. Беҙ 21-ҙе ете тапҡыр (*q*2 = 7 алырға тейешбеҙ, ҡалдыҡ ҡалмай:
: 147 = 7 × 21 + 0.

Шулай итеп a > b > *r*1 > *r*2 > *r*3 > … > *r*n эҙмә-эҙлелеге был конкрет осраҡта ошолай булып күренә:
: 1071 > 462 > 147 > 21.

Һуңғы ҡалдыҡ нулгә тигеҙ булғас, алгоритм 21 һаны менән тамамлана һәм ИҘУБ(1071, 462) = 21.

Аҙымдар таблица формаһында түбәндәгесә:

## Ҡулланылышы

### Евклидтың киңәйтелгән алгоритмы һәм Безу нисбәте

 r_i өсөн формулаларҙы ошолай итеп күсереп яҙырға була:

: r_1 = a + b(-q_0)
: r_2= b - r_1q_1 = a(-q_1)+b(1+q_1q_0)
: \vdots
: *ИҘУБ*  (a,b) = r_n = as + bt
Бында *s* һәм *t* бөтөн һандар. Иң ҙур уртаҡ бүлеүсенекүрһәтеү  Безу нисбәте тип атала, ә *s* һәм *t* һандары — Безу коэффициенттары.  Безу нисбәте Евклид леммаһын һәм арифметиканың төп теоремаһын  иҫбатлағанда төп урынды алып тора..

### Сылбырлы кәсерҙәр

Евклид алгоритмы сылбырлы кәсерҙәр менән тығыҙ бәйләнгән.  *a*/*b* сағыштырмаһын сылбырлы кәсер рәүешендә күрһәтергә мөмкин:
:: \frac ab=[q_0; q_1, q_2,\cdots,q_n].

Бында һуңғы быуынынан башҡа сылбырлы кәсер минус тамғаһы менән алынған Безу коэффициентына *t*/*s* тигеҙ:
:: [q_0; q_1, q_2,\cdots,q_{n-1}] = -\frac ts.

Евклид алгоритмын биргән һуңғы тигеҙлекте ошо формала яҙырға мөмкин:

: 
\begin{align}
\frac{a}{b} &= q_0 + \frac{r_0}{b} \\
\frac{b}{r_0} &= q_1 + \frac{r_1}{r_0} \\
\frac{r_0}{r_1} &= q_2 + \frac{r_2}{r_1} \\
& {}\  \vdots \\
\frac{r_{k-2}}{r_{k-1}} &= q_k + \frac{r_k}{r_{k-1}} \\
& {}\  \vdots \\
\frac{r_{N-2}}{r_{N-1}} &= q_N
\end{align}


Тигеҙлектең уң яғындағы һуңғы ҡушылыусы һәр ваҡыт артабанғы тигеҙләмәнең һул яғының кире ҡиммәтенә тигеҙ. Шуға күрә тәүге ике тигеҙләмәне ошолай берләштерергә мөмкин:
: \frac{a}{b} = q_0 + \cfrac{1}{q_1 + \cfrac{r_1}{r_0}} 

Өсөнсө тигеҙлек *r*1/*r*0 аңлатмаһының знаменателен алмаштырыу өсөн ҡулланылырға мөмкин. Табабыҙ:
: \frac{a}{b} = q_0 + \cfrac{1}{q_1 + \cfrac{1}{q_2 + \cfrac{r_2}{r_1}}} 

Һуңғы ҡалдыҡтар сағыштырмаһы *r**k*/*r**k*−1 һәр ваҡыт эҙмә-эҙлелектәге артабанғы тигеҙлекте ҡулланып алмаштырылырға мөмкин, һәм шулай һуңғы тигеҙләмәгә тиклем.Һөҙөмтәлә сылбырлы кәсер килеп сыға:
: \frac{a}{b} = q_0 + \cfrac{1}{q_1 + \cfrac{1}{q_2 + \cfrac{1}{\ddots + \cfrac{1}{q_N}}}} = [ q_0; q_1, q_2, \ldots , q_N ] 

Юғарыла килтерелгән  #миҫалда миҫалда ИҘУБ(1071, 462) иҫәпләнде һәм ярашлы рәүештә 2, 3 һәм 7-гә тигеҙ булған   *q**k* бүлендектәр табылды. Шуға күрә 1071/462 бүлендеге ошолай яҙылырға мөмкин:
: \frac{1071}{462} = 2 + \cfrac{1}{3 + \cfrac{1}{7}} = [2; 3, 7]

### Һыҙыҡлы диофант тигеҙләмәләр
Диофант тигеҙләмәһе — ул  бөтөн һанлы коэффициентлы һәм бер йәки бер нисә үҙгәреүсәнле тигеҙләмә, шуның менән бергә уның тик бөтөн тамырҙарын ғына табыу маҡсаты ҡуйыла. Ундай тигеҙләмәнең сикһеҙ күп сығарылышы булырға, сикле һанда сығарылышы булырға йәки бөтөнләй сығарылышы булмаҫҡа мөмкин. Иң ябай диофант тигеҙләмәһе - ике үҙгәреүсәнле һыҙыҡлы тигеҙләмә:

a \cdot x + b \cdot y = c,

бында *a*, *b*, *c* — бөтөн һандар. Евклид алгоритмы ярҙамында бындай типтағы тигеҙләмәнең тулы сығарылышын табырға мөмкин. Иң тәүҙә был алгоритм ярҙамында *d* = ИҘУБ(*a*, *b*) табырға була. Аҙаҡ, Евклидтың киңәйтелгән алгоритмын ҡулланып, шундай *k* һәм *l* табыла:

a \cdot k + b \cdot l = d.

Йәғни *x = k* һәм *y = l* - тигеҙләмәнең *c = d* булғандағы сығарылышы. Әгәр *c = q⋅d*, ул саҡта *x = q⋅k*, *y = q⋅l* - бирелгән тигеҙләмәнең сығарылышы булыуы килеп сыға, сөнки:

a \cdot x + b \cdot y = a \cdot (q \cdot k) + b \cdot (q \cdot l) = q \cdot (a \cdot k + b \cdot l) = q \cdot d = c. 

Киреһенсә, әгәр тигеҙләмәнең бер генә булһа ла сығарылышы булһа, ул саҡта *c*  *d*-ға бүленә. Был шунан килеп сыға, *d*  *a*-ны ла, һәм *b*-ны ла бүлә (тимәк бөтә һул яғын), шуға күрә *c*-ны ла (уң яғын) бүлергә тейеш. Шулай итеп, һыҙыҡлы диофант тигеҙләмәһенең бер генә булһа ла сығарылышы шул саҡта һәм тик шул саҡта була, әгәр *c* ИҘУБ(*a*, *b*)-нә бүленһә.

## Вариациялар һәм дөйөмләштереү

### Евклид балдағы

Евклид алгоритмын ҡулланып булған балдаҡтар евклид балдаҡтары  тип атала. Уларға бөтөн һандар балдаҡтары һәм күпбыуындар балдаҡтары инә.

### Күпбыуындар өсөн дөйөмләштерелгән Евклид алгоритмы

Евклид алгоритмы һәм киңәйтелгән Евклид алгоритмы тәбиғи рәүештә ирекле *k* яланында бер үҙгәреүсәнле *k*[*x*] күпбыуындар балдағында дөйөмләштерелә, сөнки ундай күпбыуындар өсөн ҡалдыҡлы бүлеү ғәмәле билдәләнгән. Күпбыуындар өсөн Евклид алгоритмын башҡарғанда, бөтөн һандарға Евклид алгоритмын ҡулланғандағыға оҡшаш рәүештә, полиномиаль ҡалдыҡтар (PRS) эҙмә-эҙлелеге килеп сыға.

### Алгоритмдың тиҙләтелгән версиялары
* Бөтөн һанлы Евклид алгоритмын тиҙләтеү ысулдарының береһе булып *симметрик ҡалдыҡ* ҡулланыу тора:
:: r_i \equiv r_{i-2} \pmod{r_{i-1}},
: бында
:: -\frac{r_{i-1}}{2}\leq r_i\leq\frac{r_{i-1}}{2}.

* Полиномдар өсөн тиҙләтелгән Евклид алгоритмы версияларының береһе, алгоритмдың аралағы ҡиммәттәре, нигеҙҙә, юғары дәрәжәгә бәйле булыуына нигеҙләнгән.  «Бүлгеслә һәм идара ит» стратегияһын ҡулланыу алгоритмдың асимптотик ҡатмарлылығын
кәметергә мөмкинлек бирә.
## Иҫкәрмәләр

## Әҙәбиәт

* 
* 
* 
*  
* 
* 
* 
* 
* 
* 
* 
* 
* 
*  

## Һылтанмалар
* Евклид алгоритмы методын тасуирлау һәм программалар коды .
* Евклид алгоритмын нигеҙләү 
* e-maxx.ru-ла Евклид алгоритмы
* C# киңәйтелгән Евклид алгоритмын тормошҡа ашырыу