这段Java代码做了什么样的数学计算?

问题描述 投票:0回答:1

我无法弄清楚这段代码解决了什么样的数学函数。有人可以给我解释一下吗?

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 */
java math
1个回答
0
投票

这是一种称为欧几里得算法的较旧算法,用于查找两个数字的 GCD 或最大公约数。欧几里得算法是求两个数的 GCD 的更有效方法。该代码的工作原理是获取两个整数

m
n
,然后反复从较大的数字中减去两个数字中较小的一个,直到它们相等。按照规则,公数值是原始两个数字的最大公约数。

在代码中,

m
从12开始,
n
从81开始。您不断地从较大的数字中减去较小的数字,直到它们相等。最后,
m
变为 3,
n
变为 3。因为
m
现在等于
n
,所以循环结束(您的
while
循环条件
m!=n
)。
m
n
的值是原两个数字的最大公约数,即3。

© www.soinside.com 2019 - 2024. All rights reserved.