Найбільший спільний дільник

Матеріал з testwiki
Версія від 13:20, 29 червня 2024, створена imported>Олюсь
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)
Перейти до навігації Перейти до пошуку

Найбі́льший спі́льний дільни́к (НСД) двох або більше невід'ємних чисел — найбільше натуральне число, на яке ці числа діляться без остачі.

Огляд

Позначення

Найбільший спільний дільник двох чисел a і b позначається як НСД(ab), деколи (ab). В англомовній літературі прийнято вживати позначення gcd(ab).

Приклад

Число 54 може бути виражене як добуток двох інших цілих чисел кількома способами:

54×1=27×2=18×3=9×6.

Отже дільниками числа 54 є:

1,2,3,6,9,18,27,54.

Аналогічно дільниками числа 24 є:

24×1=12×2=8×3=6×4.
1,2,3,4,6,8,12,24.

Числа, які знаходяться в обох цих списках, є спільними дільниками чисел 54 та 24:

1,2,3,6.

Найбільшим серед них є число 6. Воно є найбільшим спільним дільником чисел 54 та 24. Можна записати:

(54,24)=6.

Скорочення дробів

Найбільший спільний дільник використовується для скорочення дробів. Наприклад, НСД(42, 56) = 14, тому,

4256=314414=34.

Властивості

Обчислення НСД методом розкладу на прості множники

Нехай розклад чисел на прості множники має вигляд:

a=2q23q3pkqpk
b=2r23r3pkrpk

Тоді

НСД(a,b)=2min(q2;r2)3min(q3;r3)pkmin(qpk;qpk)

Приклад

Визначимо НСД(840,396). Розклад на прості множники:

840=23357
396=223211,

або, подаючи для наочності нульові степені,

840=23315171110
396=22325070111,

Отже,

НСД(840,396)=22315070110=12

Ефективним алгоритмом обчислення НСД є алгоритм Евкліда

НСД в кільці многочленів

В кільці многочленів K[X] над довільним полем K найбільшим спільним дільником многочленів f(x) і g(x), принаймні один з яких є відмінний від нуля, називаємо нормований многочлен найвищого степеня, який ділить обидва многочлени f(x) і g(x) Обчислити НСД можна розкладаючи многочлен на нескоротні множники. Можна застосувати також алгоритм Евкліда.

Приклад

Обчислимо НСД двох многочленів над полем дійсних чисел:

f(x)=2x3+6x2+14x+10
g(x)=3x23x6

Розкладаючи многочлени на нескоротні множники

f(x)=2(x+1)(x2+2x+5)
g(x)=3(x+1)(x2),

отримуємо

НСД (f(x),g(x))=x+1.

Приклади програмної реалізації знаходження НСД

Рекурсивна реалізація:

int gcd(int a, int b)
{
   if (b == 0) return a;
   return gcd(b, a % b);
}

Реалізація без використання рекурсії:

int gcd(int a, int b)
{
    if (a == 0) return b;
    while (b != 0)
    {
        if( a > b ){
            int r = a % b;
        } else {
            int r = b % a;
        }
        a = b;
        b = r;
    }
    return a;
}

Див. також

Джерела