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

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

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

Боронғо грек математиктары был алгоритмды ἀνθυφαίρεσις йәки ἀνταναίρεσις — «үҙ-ара алыу» тип атайҙар. Был алгоритм Евклид тарафынан асылмаған, сөнки ул Аристотель Топигында телгә алына. Евклид «Башланғыстарында» ул ике тапҡыр — VII китапта ике натураль һандың иң ҙур уртаҡ бүлеүсеһен табыу өсөн һәм 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_{1}q_{1}+r_{2},$
    $r_{1}=r_{2}q_{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ₙ-ға, был эҙмә-эҙлелектең һуңғы нулдән айырмалы быуынына, тигеҙ.
Шундай r₁, r₂, ..., rₙ-ҙың булыуы, йәғни теләһә ниндәй бөтөн m һәм бөтөн n ≠ 0 өсөн m-ды n-ға ҡалдыҡлы бүлеү мөмкин икәнлеге, m буйынса индукция ярҙамында иҫбатлана.
Был алгоритмдың урынлы булыуы түбәндәге ике раҫлауҙан килеп сыға:
* a = b⋅q + r булһын, ул саҡта ИҘУБ(a, b) = ИҘУБ(b, r).
* k — a һәм b һандарының мотлаҡ иң ҙур түгел, ә теләһә ниндәй уртаҡ бүлеүсеһе булһын,ти. Ул саҡта a = t₁⋅k и b = t₂⋅k, бындаt₁ и t₂ — билдәләмә буйынса бөтөн һандар. Ул саҡта k һаны ла b һәм r һандарының уртаҡ бүлеүсеһе була, Сөнки b k-ға билдәләмә буйынса бүленә, ә r = a - b⋅q = (t₁ - t₂⋅q)⋅k (йәйә эсендәге аңлатма бөтөн һан, ошонан сығып, k r-ны ҡалдыҡһыҙ бүлә).
* Кире раҫлау ҙа дөрөҫ һәм 2 пунктҡа оҡшаш иҫбатлана: b һәм r-ның теләһә ниндәй бүлеүсеһе шулай уҡ a һәм b-ның бүлеүсеһе була.
* Ошонан сығып, (a, b) һәм (b, r) һандар парҙарының бөтә уртаҡ бүлеүселәре тап килә.совпадают. Икенсе төрлө әйткәндә, (a, b) һандар парының , (b, r) һандар парының бүлеүсеһе булмаған уртаҡ бүлеүселәре юҡ, һәм киреһенсә.
* Шул иҫәптән, иң ҙур уртаҡ бүлеүселә шул уҡ ҡала.
Шуны иҫбат итергә һоралғайны ла инде.
* Нулдән айырмалы теләһә ниндәй r өсөн ИҘУБ(r, 0) = r (сөнки 0 нулдән башҡа теләһә ниндәй бөтөн һанға бүленә).

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

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

# Евклид алгоритмы
## Тасуирлама
### Миҫал

Евклид алгоритмын һүрәтләү өсөн a = 1071 һәм b = 462 һандарының ИҘУБ табыуҙы ҡарайбыҙ. Тәүҙә 1071-ҙән 462-нең тапҡырлы ҡиммәтен, айырма 462-нән кәм булғанға тиклем, алабыҙ. Беҙ ике тапҡыр 462-не алабыҙ (q₀ = 2), 147 ҡалдығы килеп сыға:
    1071 = 2 × 462 + 147.
Бынан һуң 462-нән 147-нең тапҡырлы ҡиммәтен, ҡалдыҡ 147-нән кәмерәк булғансы, алабыҙ. Беҙ 147-не өс тапҡыр (q₁ = 3)) алырға тейешбеҙ, ҡалдыҡ 21 килеп сыға:
    462 = 3 × 147 + 21.
Аҙаҡ 147-нән 21-ҙең тапҡырлы ҡиммәтен, ҡалдыҡ 21-ҙән кәмерәк булғанға тиклем, алабыҙ. Беҙ 21-ҙе ете тапҡыр (q₂ = 7 алырға тейешбеҙ, ҡалдыҡ ҡалмай:
    147 = 7 × 21 + 0.
Шулай итеп a > b > r₁ > r₂ > r₃ > … > rₙ эҙмә-эҙлелеге был конкрет осраҡта ошолай булып күренә:
    1071 > 462 > 147 > 21.
Һуңғы ҡалдыҡ нулгә тигеҙ булғас, алгоритм 21 һаны менән тамамлана һәм ИҘУБ(1071, 462) = 21.
Аҙымдар таблица формаһында түбәндәгесә:
| Аҙым k | Тигеҙлек | Бүлендек һәм ҡалдыҡ |
| 0 | 1071 = q₀ 462 + r₀ | q₀ = 2 и r₀ = 147 |
| 1 | 462 = q₁ 147 + r₁ | q₁ = 3 и r₁ = 21 |
| 2 | 147 = q₂ 21 + r₂ | q₂ = 7 и r₂ = 0; алгоритм тамам |

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

    $r_{1}=a+b(-q_{0})$
    $r_{2}=b-r_{1}q_{1}=a(-q_{1})+b(1+q_{1}q_{0})$
    $\vdots$
    ИҘУБ $(a,b)=r_{n}=as+bt$
Бында s һәм t бөтөн һандар. Иң ҙур уртаҡ бүлеүсене күрһәтеү Безу нисбәте тип атала, ә s һәм t һандары — Безу коэффициенттары. Безу нисбәте Евклид леммаһын һәм арифметиканың төп теоремаһын иҫбатлағанда төп урынды алып тора..

# Евклид алгоритмы
## Ҡулланылышы
### Сылбырлы кәсерҙәр

Евклид алгоритмы сылбырлы кәсерҙәр менән тығыҙ бәйләнгән. a/b сағыштырмаһын сылбырлы кәсер рәүешендә күрһәтергә мөмкин:
       ${\frac {a}{b}}=[q_{0};q_{1},q_{2},\cdots ,q_{n}]$.
Бында һуңғы быуынынан башҡа сылбырлы кәсер минус тамғаһы менән алынған Безу коэффициентына t/s тигеҙ:
       $[q_{0};q_{1},q_{2},\cdots ,q_{n-1}]=-{\frac {t}{s}}$.
Евклид алгоритмын биргән һуңғы тигеҙлекте ошо формала яҙырға мөмкин:
    ${\begin{aligned}{\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{aligned}}$
Тигеҙлектең уң яғындағы һуңғы ҡушылыусы һәр ваҡыт артабанғы тигеҙләмәнең һул яғының кире ҡиммәтенә тигеҙ. Шуға күрә тәүге ике тигеҙләмәне ошолай берләштерергә мөмкин:
    ${\frac {a}{b}}=q_{0}+{\cfrac {1}{q_{1}+{\cfrac {r_{1}}{r_{0}}}}}$
Өсөнсө тигеҙлек r₁/r₀ аңлатмаһының знаменателен алмаштырыу өсөн ҡулланылырға мөмкин. Табабыҙ:
    ${\frac {a}{b}}=q_{0}+{\cfrac {1}{q_{1}+{\cfrac {1}{q_{2}+{\cfrac {r_{2}}{r_{1}}}}}}}$
Һуңғы ҡалдыҡтар сағыштырмаһы rₖ/rₖ₋₁ һәр ваҡыт эҙмә-эҙлелектәге артабанғы тигеҙлекте ҡулланып алмаштырылырға мөмкин, һәм шулай һуңғы тигеҙләмәгә тиклем.Һөҙөмтәлә сылбырлы кәсер килеп сыға:
    ${\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ₖ бүлендектәр табылды. Шуға күрә 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) эҙмә-эҙлелеге килеп сыға.
Билдәләмә буйынса cont(f) — Z[x] — күпбыуындың йөкмәткеһенән f(x) күпбыуынының коэффициенттарының ИҘУБ-ы булһын, ти. . f(x)-тың cont(f)-ҡабүлендеге f(x)күпбыуынының примитив өлөшө тип атала һәм primpart(f(x)) тип тамғалана. Был билдәләмәләр Z[x]балдағында ике p₁(x) һәм p₂(x)күпбыуындарының ИҘУБ-ын тапҡанда кәрәк була. Бөтөн һандар өҫтөндә күпбыуындар өсөн түбәндәге дөрөҫ:
$cont($НОД$\{p_{1}(x),p_{2}(x)\})=$НОД$\{cont(p_{1}(x)),cont(p_{2}(x))\},$
$primpart($НОД$\{p_{1}(x),p_{2}(x)\})=$НОД$\{primpart(p_{1}(x)),primpart(p_{2}(x))\}.$
Шулай итеп, ике ирекле күпбыуындың ИҘУБ-ын табыу примитив полиномдарҙың ИҘУБ-ын табыуға ҡайтып ҡала.
Псевдобүлеүҙе ошолай аңларға кәрәк: бүлеүҙән алда $p_{1}(x)$ полиномы $(lc(p_{2}(x)))^{m-n+1}$ полиномына ҡабатлана, йәғни:
$lc(p_{2}(x))^{m-n+1}p_{1}(x)=p_{2}(x)q(x)+r_{2}(x),\deg(r(x))<\deg(p_{2}(x)),$
бында $q(x)$ һәм $r(x)$ — ярашлы рәүештә псевдобүлендек һәм псевдоҡалдыҡ.
Шулай итеп, $p_{1}(x),p_{2}(x)\in Z[x]$, шуның менән бергә $\deg(p_{1})=n_{1}\geq \deg(p_{2})=n_{2}$. Ул саҡта Евклид алгоритмы түбәндәге аҙымдарҙан тора:
1. Йөкмәткеләрҙең ИҘУБ-ын иҫәпләү:
$c:=$НОД$\{cont(p_{1}),cont(p_{2})\}$.
2. Примитив өлөштәрен иҫәпләү:
$p_{1}'(x):=primpart(p_{1}(x));$
$p_{2}'(x):=primpart(p_{2}(x)).$
3. Полиномиаль ҡалдыҡтар эҙмә-эҙлелеген төҙөү:
$p_{1}'(x),$
$p_{2}'(x),$
$p_{3}(x):=prem(p_{1}'(x),p_{2}'(x)),$
$p_{4}(x):=prem(p_{2}'(x),p_{3}(x)),$
$p_{5}(x):=prem(p_{3}(x),p_{4}(x)),$
$p_{h}(x):=prem(p_{h-2}(x),p_{h-1}(x)).$
4. Һөҙөмтәне кире ҡайтарыу:
Әгәр $\deg(p_{h}(x))=0$ булһа, ул саҡта $c$-ны кире ҡайтарырға, кире осраҡта $c\cdot primpart(p_{h}(x))$-ны кире ҡайтарырға.

# Евклид алгоритмы
## Вариациялар һәм дөйөмләштереү
### Алгоритмдың тиҙләтелгән версиялары

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