这段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
相关产品推荐
相关产品推荐

