Розширений алгоритм Евкліда — це розширення алгоритму Евкліда. Окрім знаходження найбільшого спільного дільника для цілих a і b, як це робить алгоритм Евкліда, він також знаходить цілі x і y (одне з яких зазвичай від'ємне), які задовольняють рівнянню Безу.
Розширений алгоритм Евкліда особливо корисний коли a і b взаємно прості числа, бо x — обернене щодо a за модулем b, а y — обернене щодо b за модулем a.
Неформальне визначення алгоритму
Ділене | Дільник | Частка | Остача |
---|---|---|---|
120 | 23 | 5 | 5 |
23 | 5 | 4 | 3 |
5 | 3 | 1 | 2 |
3 | 2 | 1 | 1 |
2 | 1 | 2 | 0 |
Для пояснення алгоритму Евкліда, розглянемо обчислення НСД(120, 23), що показано на таблиці ліворуч.
В цьому випадку, остача в четвертому рядку (дорівнює 1) показує, що НСД 1; тобто 120 і 23 взаємно прості. Задля простоти обрані взаємно прості числа; але загальний випадок, коли НСД не дорівнює 1 спрацьовує подібним чином.
Існують два методи обробки, обидва із використанням ділення з остачею.
Ітеративний метод
Цей метод обчислює вираз виду для остачі на кожному кроці алгоритму Евкліда. Кожний наступний номер можна записати як остачу від ділення попередніх двох таких чисел, цю остачу можна виразити, використовуючи частку qi так:
Через заміну це дає:
- що можна записати як
Перші два значення алгоритму є початковими аргументами алгоритму:
Отже коефіцієнти мають такі початкові значення: x1 = 1, y1 = 0, x2 = 0, і y2 = 1. Інші отримуються за допомогою виразів:
Вираз для останньої ненульової остачі дає бажаний результат, бо цей метод обчислює кожний залишок у вигляді a і b, як і вимагалось.
Приклад: Обчислити НСД для 120 і 23.
Обчислення відбуваються так:
Крок | Частка | Остача | Заміна | Сума термів | |
---|---|---|---|---|---|
1 | 120 | 120 = 120 × 1 + 23 × 0 | |||
2 | 23 | 23 = 120 × 0 + 23 × 1 | |||
3 | 5 | 5 = 120 − 23 × 5 | 5 = (120 × 1 + 23 × 0) − (120 × 0 + 23 × 1) × 5 | 5 = 120 × 1 + 23 × −5 | |
4 | 4 | 3 = 23 − 5 × 4 | 3 = (120 × 0 + 23 × 1) − (120 × 1 + 23 × −5) × 4 | 3 = 120 × −4 + 23 × 21 | |
5 | 1 | 2 = 5 − 3 × 1 | 2 = (120 × 1 + 23 × −5) − (120 × −4 + 23 × 21) × 1 | 2 = 120 × 5 + 23 × −26 | |
6 | 1 | 1 = 3 − 2 × 1 | 1 = (120 × −4 + 23 × 21) − (120 × 5 + 23 × −26) × 1 | 1 = 120 × −9 + 23 × 47 | |
7 | 2 | 0 | Кінець алгоритму |
Розв'язок: x = −9 і y = 47.
Через те, що НСД виявився 1, отримуємо також, що 47 є оберненим до 23 за модулем 120, і також за модулем 23, -9 (або 14 = -9 + 23) є оберненим 120 (або тотожно 5 = 120 — 23 *5) .
- 47 × 23 ≡ 1 (mod 120) і також
−9 × 120 ≡14 × 5 ≡ 1 (mod 23).
Для того, щоб ціле a можна було обернути за модулем b, необхідно щоб a і b були взаємно простими, отже якщо НСД більший від 1, таке модульне обернення не існує.
Зауважте, що рівняння, що визначають значення xi незалежні від тих, які визначають значення yi, і що рівняння Безу отримане наприкінці
дозволяє вивести yk коли xk відоме. Користувач може опустити значення yi, не обчислюючи їх (хоча вони можуть бути корисними як перевірка на помилки обчислень).
Псевдокод
РОЗШИРЕНИЙ-ЕВКЛІД
|
Якщо b не нуль, тоді РОЗШИРЕНИЙ-ЕВКЛІД спочатку обчислює (d', x', y') такі, що d' = НСД(b, a mod b) і
Щоб отримати і такі, щоб ми перепишемо попереднє рівняння використавши, що так:
Швидкодія
Оскільки кількість рекурсивних викликів у звичайного і розширеного алгоритму Евкліда однакова, то їх час виконання однаковий аж до сталого множника. Тобто, для кількість рекурсивних викликів є
Код
C++
void ex_al_eu_in(int r1, int r2, int x1, int x2, int y1, int y2, int &gcd, int &a, int &b) { int r3 = r1 - r2 * (r1 / r2); int x3 = x1 - x2 * (r1 / r2); int y3 = y1 - y2 * (r1 / r2); if (r3) ex_al_eu_in(r2, r3, x2, x3, y2, y3, gcd, a, b); else { gcd = r2; a = x2; b = y2; } } void ex_al_eu(int r1, int r2, int &gcd, int &a, int &b) { ex_al_eu_in(r1 > r2 ? r1 : r2, r1 < r2 ? r1 : r2, 1, 0, 0, 1, gcd, r1 > r2 ? a : b, r1 < r2 ? a : b); }
def extended_euclid(a, b): """ Повертає d=НСД(x,y) і x, y такі, що ax + by = d """ if (b==0): return a, 1, 0 d, x, y = extended_euclid(b, a % b) return d, y, x - (a//b)*y
Література
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. Introduction to Algorithms, Second Edition. MIT Press and McGraw-Hill, 2001. . Pages 859—861 of section 31.2: Greatest common divisor.
Посилання
- Source for the form of the algorithm used to determine the multiplicative inverse in GF(2^8) [ 25 лютого 2021 у Wayback Machine.]
Це незавершена стаття з математики. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Rozshirenij algoritm Evklida ce rozshirennya algoritmu Evklida Okrim znahodzhennya najbilshogo spilnogo dilnika dlya cilih a i b yak ce robit algoritm Evklida vin takozh znahodit cili x i y odne z yakih zazvichaj vid yemne yaki zadovolnyayut rivnyannyu Bezu a x b y gcd a b displaystyle ax by gcd a b Rozshirenij algoritm Evklida osoblivo korisnij koli a i b vzayemno prosti chisla bo x obernene shodo a za modulem b a y obernene shodo b za modulem a Neformalne viznachennya algoritmuDilene Dilnik Chastka Ostacha 120 23 5 5 23 5 4 3 5 3 1 2 3 2 1 1 2 1 2 0 Dlya poyasnennya algoritmu Evklida rozglyanemo obchislennya NSD 120 23 sho pokazano na tablici livoruch V comu vipadku ostacha v chetvertomu ryadku dorivnyuye 1 pokazuye sho NSD 1 tobto 120 i 23 vzayemno prosti Zadlya prostoti obrani vzayemno prosti chisla ale zagalnij vipadok koli NSD ne dorivnyuye 1 spracovuye podibnim chinom Isnuyut dva metodi obrobki obidva iz vikoristannyam dilennya z ostacheyu Iterativnij metod Cej metod obchislyuye viraz vidu r i a x i b y i displaystyle r i ax i by i dlya ostachi na kozhnomu kroci i displaystyle i algoritmu Evklida Kozhnij nastupnij nomer r i displaystyle r i mozhna zapisati yak ostachu vid dilennya poperednih dvoh takih chisel cyu ostachu mozhna viraziti vikoristovuyuchi chastku qi tak r i r i 2 q i r i 1 displaystyle r i r i 2 q i r i 1 Cherez zaminu ce daye r i a x i 2 b y i 2 q i a x i 1 b y i 1 displaystyle r i ax i 2 by i 2 q i ax i 1 by i 1 sho mozhna zapisati yak r i a x i 2 q i x i 1 b y i 2 q i y i 1 displaystyle r i a x i 2 q i x i 1 b y i 2 q i y i 1 Pershi dva znachennya algoritmu ye pochatkovimi argumentami algoritmu r 1 a a 1 b 0 displaystyle r 1 a a times 1 b times 0 r 2 b a 0 b 1 displaystyle r 2 b a times 0 b times 1 Otzhe koeficiyenti mayut taki pochatkovi znachennya x1 1 y1 0 x2 0 i y2 1 Inshi otrimuyutsya za dopomogoyu viraziv x i x i 2 q i x i 1 displaystyle x i x i 2 q i x i 1 y i y i 2 q i y i 1 displaystyle y i y i 2 q i y i 1 Viraz dlya ostannoyi nenulovoyi ostachi daye bazhanij rezultat bo cej metod obchislyuye kozhnij zalishok u viglyadi a i b yak i vimagalos Priklad Obchisliti NSD dlya 120 i 23 Obchislennya vidbuvayutsya tak Krok Chastka Ostacha Zamina Suma termiv 1 120 120 120 1 23 0 2 23 23 120 0 23 1 3 5 5 120 23 5 5 120 1 23 0 120 0 23 1 5 5 120 1 23 5 4 4 3 23 5 4 3 120 0 23 1 120 1 23 5 4 3 120 4 23 21 5 1 2 5 3 1 2 120 1 23 5 120 4 23 21 1 2 120 5 23 26 6 1 1 3 2 1 1 120 4 23 21 120 5 23 26 1 1 120 9 23 47 7 2 0 Kinec algoritmu Rozv yazok x 9 i y 47 Cherez te sho NSD viyavivsya 1 otrimuyemo takozh sho 47 ye obernenim do 23 za modulem 120 i takozh za modulem 23 9 abo 14 9 23 ye obernenim 120 abo totozhno 5 120 23 5 47 23 1 mod 120 i takozh 9 120 14 5 1 mod 23 Dlya togo shob cile a mozhna bulo obernuti za modulem b neobhidno shob a i b buli vzayemno prostimi otzhe yaksho NSD bilshij vid 1 take modulne obernennya ne isnuye Zauvazhte sho rivnyannya sho viznachayut znachennya xi nezalezhni vid tih yaki viznachayut znachennya yi i sho rivnyannya Bezu otrimane naprikinci G C D r k a x k b y k displaystyle mathit GCD r k ax k by k dozvolyaye vivesti yk koli xk vidome Koristuvach mozhe opustiti znachennya yi ne obchislyuyuchi yih hocha voni mozhut buti korisnimi yak perevirka na pomilki obchislen PsevdokodROZShIRENIJ EVKLID a b displaystyle a b yaksho b 0 displaystyle b 0 povernuti a 1 0 displaystyle a 1 0 inakshe d x y displaystyle d x y ROZShIRENIJ EVKLID b a mod b displaystyle b a mod b d x y d y x a b y displaystyle d x y d y x lfloor a b rfloor y povernuti d x y displaystyle d x y Yaksho b ne nul todi ROZShIRENIJ EVKLID spochatku obchislyuye d x y taki sho d NSD b a mod b i d b x a mod b y displaystyle d bx a mod b y Shob otrimati x displaystyle x i y displaystyle y taki shob d a x b y displaystyle d ax by mi perepishemo poperednye rivnyannya vikoristavshi sho d d displaystyle d d tak d displaystyle d b x a b a b y displaystyle bx a b lfloor a b rfloor y a y b x a b y displaystyle ay b x lfloor a b rfloor y ShvidkodiyaOskilki kilkist rekursivnih viklikiv u zvichajnogo i rozshirenogo algoritmu Evklida odnakova to yih chas vikonannya odnakovij azh do stalogo mnozhnika Tobto dlya a gt b gt 0 displaystyle a gt b gt 0 kilkist rekursivnih viklikiv ye O lg b displaystyle O lg b KodC void ex al eu in int r1 int r2 int x1 int x2 int y1 int y2 int amp gcd int amp a int amp b int r3 r1 r2 r1 r2 int x3 x1 x2 r1 r2 int y3 y1 y2 r1 r2 if r3 ex al eu in r2 r3 x2 x3 y2 y3 gcd a b else gcd r2 a x2 b y2 void ex al eu int r1 int r2 int amp gcd int amp a int amp b ex al eu in r1 gt r2 r1 r2 r1 lt r2 r1 r2 1 0 0 1 gcd r1 gt r2 a b r1 lt r2 a b Python def extended euclid a b Povertaye d NSD x y i x y taki sho ax by d if b 0 return a 1 0 d x y extended euclid b a b return d y x a b yLiteraturaThomas H Cormen Charles E Leiserson Ronald L Rivest and Clifford Stein Introduction to Algorithms Second Edition MIT Press and McGraw Hill 2001 ISBN 0 262 03293 7 Pages 859 861 of section 31 2 Greatest common divisor PosilannyaSource for the form of the algorithm used to determine the multiplicative inverse in GF 2 8 25 lyutogo 2021 u Wayback Machine Ce nezavershena stattya z matematiki Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi