使用 Euclid 算法计算 GCD

大苏尔

我正在阅读有关计算 GCD 的 Euclid 算法并找到以下代码:

#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<0m<0我们让n=-nm=-m

  2. 如果 m==0 我应该返回什么?最小可能的 GCD 是 1 但这个函数在这种情况下不返回任何东西......(如果我们忽略return 0main 所必需的)

亨利

算法的第二部分仅适用于 m 和 n 的非负值。由于 gcd(m,n) = gcd(|m|,|n|) 它们被设为正数。

如果 m = 0 且 n != 0,则 gcd 为 n,反之亦然。

如果 n 和 m 均为 0,则 gcd 未定义,因为每个数字都是 0 的除数。因此,在这种情况下不会打印任何内容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章