You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

这段Java代码实现的是哪种数学计算?请帮忙解析

这段Java代码的数学逻辑解析

这段代码实现的是计算两个正整数的最大公约数(Greatest Common Divisor, GCD),是欧几里得算法的减法实现版本。

原代码

int m = 12;
int n = 81;
while (m != n)
{
    if (m > n)
        m -= n;
    else
        n -= m;
}
System.out.println("m = " + m);

逻辑拆解

核心原理:两个正整数的最大公约数,等于「较大数减去较小数的结果」与「较小数」的最大公约数。重复执行“大数减小数”的操作,直到两个数相等,这个相等的数就是它们的最大公约数。

结合给出的执行过程看:

  • 初始m=12、n=81,因12<81,n持续减去m,依次得到69、57、45、33、21,直到n=9
  • 此时m=12>9,m减去n得到3
  • 接下来m=3、n=9,n持续减m得到6,再减一次得到3,此时m和n均为3,循环终止,输出的3正是12和81的最大公约数(12=3×4,81=3×27,无更大公共因数)

补充说明

这种减法实现的效率低于标准欧几里得算法(用取模运算%),因为当两数差距悬殊时,需要多次减法操作,而取模可以直接得到大数除以小数的余数,大幅减少循环次数。

内容的提问来源于stack exchange,提问作者Shinji Ikari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 09:46:18