我无法弄清楚这段代码解决了什么样的数学函数。有人可以给我解释一下吗?
int m = 12;
int n = 81;
while (m != n)
{
if (m > n)
m -= n;
else
n -= m;
}
System.out.println("m = " + m);
/* 12 != 81: true, 12 > 81: false, n = 81 - 12 = 69
12 != 69: true, 12 > 69: false, n = 69 - 12 = 57
12 != 57: true, 12 > 57: false, n = 57 - 12 = 45
12 != 45: true, 12 > 45: false, n = 45 - 12 = 33
12 != 33: true, 12 > 33: false, n = 33 - 12 = 21
12 != 21: true, 12 > 21: false, n = 21 - 12 = 9
12 != 9: true,12 > 9: true, m = 12 - 9 = 3
3 != 9: true, 3 > 9: false, n = 9 - 3 = 6
3 != 6: true, 3 > 6: false, n = 6 - 3 = 3
3 != 3: false
m = 3 */
这是一种称为欧几里得算法的较旧算法,用于查找两个数字的 GCD 或最大公约数。欧几里得算法是求两个数的 GCD 的更有效方法。该代码的工作原理是获取两个整数
m
和 n
,然后反复从较大的数字中减去两个数字中较小的一个,直到它们相等。按照规则,公数值是原始两个数字的最大公约数。
在代码中,
m
从12开始,n
从81开始。您不断地从较大的数字中减去较小的数字,直到它们相等。最后,m
变为 3,n
变为 3。因为 m
现在等于 n
,所以循环结束(您的 while
循环条件 m!=n
)。 m
或n
的值是原两个数字的最大公约数,即3。