怎么用Java求最大公约数
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,这篇文章主要介绍"怎么用Java求最大公约数",在日常操作中,相信很多人在怎么用Java求最大公约数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么用Java求最大公
千家信息网最后更新 2025年01月31日怎么用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安全错误
数据库的锁怎样保障安全
服务器填充
奥迪互联网科技服务
美版激活服务器怎么样
2个表格去重复数据库
初中毕业自学网络安全工程师
e5v3配什么服务器主板
杭州小号网络技术
中国网络安全部队人在塔在
网络安全和信息化管理岗做啥
网络技术新进展
软件开发c 面试题目
数据库设计有关的书
天津南开华育网络技术
服务器告警什么意思
隐藏手机号码软件开发
云展厅用什么软件开发
多台服务器下载一个文件
电力系统网络安全培训
数字货币新基建网络安全股票
根服务器的价格
网络安全与执法学英语吗
数据库的字段名可以修改吗
还原数据库的时候找不到源设备
广播电视发射台网络安全
全民网络安全知识测试
联想服务器电脑售后
华为电脑服务器怎么删除
兰考租房软件开发
数据库中表和视图是什么意思
同一网络有多个服务器程序