Наибольший общий делитель (НОД) и наименьшее общее кратное чисел (НОК)

Слайд 2

Наибольший общий делитель

НОД чисел a и b – наибольшее число, являющееся делителем

Наибольший общий делитель НОД чисел a и b – наибольшее число, являющееся
этих двух чисел.
НОД(7,14)=7
НОД(15,5)=5
НОД(30,-10)=10

Слайд 3

Алгоритмы нахождения НОД

Алгоритм Евклида
int NOD(int a,int b)//Найдите ошибку
{
while(a!=0 && b!=0)

Алгоритмы нахождения НОД Алгоритм Евклида int NOD(int a,int b)//Найдите ошибку { while(a!=0
{
if(a>=b) a=a%b;
else b=b%a;
}
return a+b;
}

Слайд 4

Алгоритмы нахождения НОД

Бинарный алгоритм Евклида
long gcd_binary(long a, long b)
{ a=abs(a); b=abs(b);

Алгоритмы нахождения НОД Бинарный алгоритм Евклида long gcd_binary(long a, long b) {
if (a==b) return a;
else if (a==0) return b;
else if (b==0||a==1) return a;
else if (b==1) return b;
else if (a%2==0&&b%2==0) return 2*gcd_binary(a/2,b/2);
else if (a%2==0&&b%2!=0) return gcd_binary(a/2,b);
else if (a%2!=0&&b%2==0) return gcd_binary(b/2, a);
else if (a else return gcd_binary((a-b)/2, b);
}

Слайд 5

Алгоритмы нахождения НОД

Расширенный алгоритм Евклида
int gcd (int a, int b, int &

Алгоритмы нахождения НОД Расширенный алгоритм Евклида int gcd (int a, int b,
x, int & y) {
if (a == 0) {
x = 0; y = 1;
return b;
}
int x1, y1;
int d = gcd (b%a, a, x1, y1);
x = y1 - (b / a) * x1;
y = x1;
return d;
}