怎么用Java求最大公约数
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,这篇文章主要介绍"怎么用Java求最大公约数",在日常操作中,相信很多人在怎么用Java求最大公约数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么用Java求最大公
千家信息网最后更新 2025年12月03日怎么用Java求最大公约数
这篇文章主要介绍"怎么用Java求最大公约数",在日常操作中,相信很多人在怎么用Java求最大公约数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么用Java求最大公约数"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
/** * @date 2019/7/25 11:33 * description:求最大公约数 */public class CommonDivisor { /** * 第一版本 * 最简单的想法,找较小数的一半,从大到小,开始试着找出能够同时两个数整除最大数 * 这种方法暴力枚举,会循环很多次 * * @param a * @param b * @return */ public static int getGreatestCommonDivisor(int a, int b) { int big = a > b ? a : b; int small = a < b ? a : b; if (big % small == 0) { return small; } for (int i = small / 2; i > 1; i--) { if (small % i == 0 && big % i == 0) { return i; } } return 1; } /** * 第二版本 * 欧几里得算法:辗转相除法求最大公约数 * 两个正数a和b(a>b),它们的最大公约数等于a和b相除的余数c和b的最大公约数 我们可以使用递归的方法简化问题 * eg 10和25 的最大公约数等于 余数5和10的最大公约数 5 * 缺点 : 两个数较大时 a%b的转换效率低 * * @param a * @param b * @return */ public static int getGreatestCommonDivisor2(int a, int b) { int big = a > b ? a : b; int small = a < b ? a : b; if (big % small == 0) { return small; } return getGreatestCommonDivisor2(big % small, small); } /** * 第三版本 * 九章算术 * 更相减损术 :两个正整数a,b(a>b),他们的最大公约数等于a-b的差值c和较小数b的最大公约数 * 缺点:两数相差很大时,递归次数太大 * * @param a * @param b * @return */ public static int getGreatestCommonDivisor3(int a, int b) { if (a == b) { return a; } int big = a > b ? a : b; int small = a < b ? a : b; return getGreatestCommonDivisor3(big - small, small); } /** * 第四版本 * 九章算术 更相减损术和辗转相除法结合起来, 更相减损术上使用位移操作 * 更相减损术 :两个正整数a,b(a>b),他们的最大公约数等于a-b的差值c和较小数b的最大公约数 * 缺点:两数相差很大时,递归次数太大 * * @param a * @param b * @return */ public static int getGreatestCommonDivisor4(int a, int b) { if (a == b) { return a; } if ((a & 1) == 0 && (b & 1) == 0) { return getGreatestCommonDivisor4(a >> 1, b >> 1) << 1; } else if ((a & 1) == 0 && (b & 1) != 0) { return getGreatestCommonDivisor4(a >> 1, b); } else if ((a & 1) != 0 && (b & 1) == 0) { return getGreatestCommonDivisor4(a, b >> 1); } else { int big = a > b ? a : b; int small = a < b ? a : b; return getGreatestCommonDivisor4(big - small, small); } } public static void main(String[] args) { System.out.println(getGreatestCommonDivisor4(25, 5)); System.out.println(getGreatestCommonDivisor4(100, 80)); System.out.println(getGreatestCommonDivisor4(27, 14)); }}到此,关于"怎么用Java求最大公约数"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
最大
公约数
最大公约数
学习
两个
小数
方法
缺点
递归
很大
余数
差值
更多
次数
问题
帮助
实用
较大
接下来
同时
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
大专考计算机网络技术
ea服务器分部
在设计院做软件开发
共签《网络安全法》横幅
怎么输入对应的服务器网址
网络安全尽职免责
石家庄软件开发先找驰宇网络
dna打拐数据库保存多久
小米无线共享网络安全吗
opendns服务器
空间数据库配置
临海网络安全宣传周
深圳市网络安全
旅店业网络安全
如何整理表格中相同的数据库
计算机网络技术的优势和劣势
服务器硬盘维修报价表
云服务器公用安全性保障
数据库表及关系
数据库技术发展趋势
手机游戏服务器地址查找
php软件开发+最新全套
滦南信息网络技术答疑解惑
网络安全路由的配置
网络安全骚扰电话
昆明软件开发合作
银行和联行号和数据库中的不一致
数据库中查询日期
网络安全管理与技术
网络安全青少年如何上网