Расчет НОД с использованием алгоритма Евклида - PullRequest
0 голосов
/ 14 июля 2020

Я читал об алгоритме Евклида для вычисления GCD и нашел следующий код:

#include <stdio.h> 
int main() 
{
    int m, n;
    scanf("%d%d", &n, &m);
    if (n < 0) n = -n;
    if (m < 0) m = -m;
    while(n != 0) 
    {   
        int temp = n;
        n = m % n; 
        m = temp;
    }
    if(m != 0)
        printf("The gcd is %d\n", m);
    return 0; 
}

Но у меня есть несколько вопросов:

  1. почему, если n<0 или m<0 мы позволяем n=-n или m=-m

  2. Что, если m == 0, что я должен вернуть? Наименьший возможный GCD равен 1, но эта функция в этом случае ничего не возвращает ... (Если мы проигнорируем return 0, что необходимо для main)

Ответы [ 2 ]

3 голосов
/ 14 июля 2020

Вторая часть алгоритма работает только для неотрицательных значений m и n. Так как gcd (m, n) = gcd (| m |, | n |) они делаются положительными.

Если m = 0 и n! = 0, gcd равен n, и наоборот.

Если и n, и m равны 0, НОД не определен, потому что каждое число является делителем 0. Следовательно, в этом случае ничего не печатается.

2 голосов
/ 14 июля 2020

Ответ 1:

Этот алгоритм работает правильно для неотрицательного значения m и положительного значения n.

Пример:

GCD (-6, 2) = GCD (6, -2) = GCD (-6, -2) = GCD (6, 2) = 2

Ответ 2:

Если m == 0, то эта функция вернет GCD равно n

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...