我正在阅读有关计算 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;
}
但我有一些问题:
为什么如果n<0
或m<0
我们让n=-n
或m=-m
如果 m==0 我应该返回什么?最小可能的 GCD 是 1 但这个函数在这种情况下不返回任何东西......(如果我们忽略return 0
main 所必需的)
算法的第二部分仅适用于 m 和 n 的非负值。由于 gcd(m,n) = gcd(|m|,|n|) 它们被设为正数。
如果 m = 0 且 n != 0,则 gcd 为 n,反之亦然。
如果 n 和 m 均为 0,则 gcd 未定义,因为每个数字都是 0 的除数。因此,在这种情况下不会打印任何内容。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句