euklideszi algoritmus
Kiejtés
- IPA: [ ˈɛuklidɛsiɒlɡoritmuʃ]
Főnév
- (matematika, algoritmusok) Módszer két különböző szám legnagyobb közös osztójának megtalálására.
- Osszuk el maradékosan a nagyobbik számot a másik számmal.
- Ha a maradék 0, akkor a legnagyobb közös osztó éppen a kisebbik szám.
- Ha a maradék nullától különböző, akkor a keresett legnagyobb közös osztó megegyezik a maradék és a kisebb szám legnagyobb közös osztójával, ezért megismételhetjük az első lépést erre a két számra.
Euklideszi algoritmus bemutatása
Az Euklideszi algoritmus az egyik legrégebbi, mégis rendkívül hatékony algoritmus a legnagyobb közös osztó (LNKO, angolul GCD) meghatározására két szám között. Az algoritmus az osztási maradék ismételt alkalmazásán alapul: a két szám legnagyobb közös osztója megegyezik a kisebb szám és az osztási maradék legnagyobb közös osztójával.
Elmélet
Az algoritmus logikája: 1. Vegyünk két számot, (a) és (b), ahol (a b). 2. Osszuk el (a)-t (b)-vel, és határozzuk meg az osztási maradékot ((r)). 3. Az új számok: (a b), (b r). 4. Addig ismételjük, amíg (b = 0). Ekkor (a) a legnagyobb közös osztó.
Példa működésre: - (a = 48), (b = 18): - (48 = 2) maradék (12), - (a = 18), (b = 12), - (18 = 1) maradék (6), - (a = 12), (b = 6), - (12 = 2) maradék (0), - LNKO = 6.
Időkomplexitás: - Az algoritmus hatékonysága (O(((a, b)))), mivel minden iterációban a kisebbik szám legalább felére csökken.
Pszeudokód
Euklideszi(a, b): amíg b ≠ 0: r = a % b a = b b = r visszatér a
Python implementáció
def gcd(a, b):
while b != 0:
a, b = b, a % b
return a
# Példa
print(gcd(48, 18)) # Kimenet: 6
C++ implementáció
#include <iostream>
using namespace std;
int gcd(int a, int b) {
while (b != 0) {
int r = a % b;
a = b;
b = r;
}
return a;
}
int main() {
cout << gcd(48, 18) << endl; // Kimenet: 6
return 0;
}
Kiterjesztett Euklideszi algoritmus
A kiterjesztett változat nemcsak az LNKO-t határozza meg, hanem két egész számot, (x)-et és (y)-t is, amelyek kielégítik az alábbi összefüggést: [ a x + b y = (a, b) ].
Pszeudokód a kiterjesztett verzióhoz
KiterjesztettEuklideszi(a, b): ha b = 0: visszatér (a, 1, 0) (gcd, x1, y1) = KiterjesztettEuklideszi(b, a % b) x = y1 y = x1 - (a // b) * y1 visszatér (gcd, x, y)
Python implementáció (kiterjesztett változat)
def extended_gcd(a, b):
if b == 0:
return a, 1, 0
gcd, x1, y1 = extended_gcd(b, a % b)
x = y1
y = x1 - (a // b) * y1
return gcd, x, y
# Példa
g, x, y = extended_gcd(48, 18)
print(f"GCD: {g}, x: {x}, y: {y}") # Kimenet: GCD: 6, x: -1, y: 3
Összegzés
Az Euklideszi algoritmus és annak kiterjesztett változata alapvető matematikai eszközök, amelyek hatékonyan számolják a legnagyobb közös osztót, illetve annak lineáris kombinációját. Pythonban és C++-ban egyszerűen implementálható, és széles körben használják a számelmélet, kriptográfia és algoritmusok területén.
Fordítások
- angol: Euclidean algorithm (en), Euclid's algorithm (en)
- orosz: алгоритм Евклида (ru) (algoritm Jevklida)
- spanyol: algoritmo de Euclides (es)
- euklideszi algoritmus - Értelmező szótár (MEK)
- euklideszi algoritmus - Etimológiai szótár (UMIL)
- euklideszi algoritmus - Szótár.net (hu-hu)
- euklideszi algoritmus - DeepL (hu-de)
- euklideszi algoritmus - Яндекс (hu-ru)
- euklideszi algoritmus - Google (hu-en)
- euklideszi algoritmus - Helyesírási szótár (MTA)
- euklideszi algoritmus - Wikidata
- euklideszi algoritmus - Wikipédia (magyar)