【Java】求最大公约数
首先做这个题需要先复习几组概念:
- 如果数
a
能被数b
整除,a
就叫做b
的倍数,b
就叫做a
的约数。 - 几个整数中公有的约数,叫做这几个数的公约数;其中最大的一个,叫做这几个数的最大公约数。
举例:
12,16
12的约数有:1,2, 3, 4, 6, 12
16的约数有:1, 2, 4, 8, 16
故而最大的公约数为4。
求最大公约数有多种方法,常见的有辗转相除法。
1. 朴素解——暴力求解
观察性质或者案例,我们可以知道最大公约数一定满足(对于数A
和数B
来说,最大公约数C
),A%C=0
且B%C=0
。且最大。
那么我们可以从后往前暴力遍历即可,且开始的位置为较小的那个数。
private static int getMaxCommonDivisor(int a, int b) {// 使a小,b大if(a > b){// 两个数交换a = a + b;b = a - b;a = a - b;}int temp = a;while(temp > 0){if(a % temp == 0 && b % temp == 0){break;}temp--;}return temp;
}
这里注意到两个数交换的写法,这里使用的的是加减来做。原理为x = x + y - x
,以达到交换目的。
所以数x和数y的交换可以写为:
x = x + y;
y = x - y;
x = x - y;
类似的,在位运算中,可以使用:x = x ^ y ^ x
来达到交换的目的,因为异或运算相同为0,故而可以达到。
所以数x和数y的交换可以写为:
x = x ^ y;
y = x ^ y; // y = x
x = x ^ y; // x = y
2. 辗转相除法
这里为了直观直接拷贝百度百科的图片:
这里举个例子:1997 和 615
- 首先取较大数为被除数,即
1997
,615
为除数,得到余数152
; - 将上轮的除数
615
作为本轮的被除数,上轮的余数152
为本轮的除数,得到余数7
; - 重复这个过程,直到余数为
0
; - 此时返回本轮的被除数的值。
故而可以写出如下代码:
private static int getMaxCommonDivisor(int a, int b) {// 使 a < b 成立if(a > b){a = a + b;b = a - b;a = a - b;}int yu = 0;do{yu = b % a;b = a;a = yu;}while (yu != 0);return b;
}
【Java】求最大公约数相关推荐
- Java求最大公约数与最小公倍数
Java求最大公约数与最小公倍数 Java求最大公约数与最小公倍数 import java.util.Scanner;public class Main {public static void mai ...
- java求最大公约数(分解质因数)
下面是四种用java语言编程实现的求最大公约数的方法: package gcd;import java.util.ArrayList; import java.util.List;public cla ...
- java - 求最大公约数和最小公倍数
根据提示输入两个正整数 m 和 n,求其最大公约数和最小公倍数 并进行控制台输出. 原理分析 在循环中,只要除数不等于 0,用较大数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮 ...
- java求约数_[转载]Java求最大公约数与最小公倍数
(看到一份不错的总结,拿来收着) 如果数a能被数b整除,a就叫做b的倍数,b就叫做作a的约数.约数和倍数都表示一个数与另一个数的关系,不能单独存在.如只能说16是某数的倍数,2是某数的约数,而不能孤立 ...
- java求最大公约数_java求最大公约数(分解质因数)
下面是四种用java语言编程实现的求最大公约数的方法: package gcd; import java.util.ArrayList; import java.util.List; public c ...
- C#/java 求最大公约数和最小公倍数
以下是主框架: //以下为求最大公约数s for(int i=1;i<=(a<b?a:b);i++) { if(a%i==0&&b%i==0) max=i; } //以下为 ...
- Java 求最大公约数
文章目录 前言 一.四种方法 1.暴力枚举 2.辗转相除法 3.更相减损法 4.简化的辗转相除法 前言 求最大公约数,是比较常见的算法,下面总结几种常用的方法 一.四种方法 1.暴力枚举 无脑流,最为 ...
- java求最大公约数和最小公倍数
求两个数的最大公约数和最小公倍数是我们学习各种语言常见的一种问题,给定如何求出两个数,求出最小公倍数和最大公约数,其实只要我们理解意思,发现规律,这道题还是比较容易的,下面来看一下代码实现: // 输 ...
- java求最大公约数_10道java经典算法题,小白必备,每一题都能提升你的java能力...
JAVA经典算法 跪求关注,祝关注我的人都:身体健康,财源广进,福如东海,寿比南山,早上贵子,从不掉发! 更多java资料可以私信我领取! [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每 ...
- java求最大公约数
最大公因数:也称最大公约数.最大公因子,指两个或多个整数共有约数中最大的一个. 任意输入两个整数,如何求它们的最大公约数? 方法一:两个整数中大的整数对小的求余,若不为0,则让小的整数减1,继续循环, ...
最新文章
- Keras【Deep Learning With Python】MNIST数据集识别优化
- 图表插件Highcharts的动态化赋值,实现图表数据的动态化设置显示
- CentOS 7.4下使用yum安装MySQL5.7.20 最简单的
- Latex中定理、引理、证明、假设、空白行
- AUTOSAR从入门到精通100讲(四十二)-Autosar架构下的模块详细设计及代码实现--基于配置的编程方法
- vs怎么把textbox输入的实数放置变量里_方程的计算机处理96(3)_C++vs
- Magento 创建唯一优惠券 Create unique coupon code in Magento
- 手写一些js方法收集:
- IBM Bluemix 自然语言处理初识
- java怎么看内存值_【java】内存分析
- 拓端tecdat|在PYTHON中进行主题模型LDA分析
- 9.react 从入门到放弃
- cvFloodFill() 漫水填充算法
- 深度搜索(DFS) 和 广度搜索(BFS)
- java实现word、pdf文件下载功能
- [博应用软件]如何正确安装路由器?
- 学习opencv:PS滤镜—曝光过度
- TpLink路由访问控制
- linux外置光驱调速,买内置不如买外置 五款外置光驱推荐
- Netbeans安装教程
热门文章
- win7打不开计算机网络连接,win7系统有网络但是打不开网页的解决方法【图文】...
- testflight无法联网怎么办_Testflight不可用怎么办?
- CAD批量画八边形风机基础平台
- 深圳一AI公司人脸数据泄露,超256万用户敏感信息在“裸奔”!
- ros学习(2-2):ros节点创建(python)
- One PUNCH Man——线性回归算法
- 东京迪斯尼海洋乐园攻略_迪士尼乐园-软件工程师的观点
- win10,没有内置录音机,如何解决
- 机器学习和NLP面试总结
- Lazada和Shopee选品分析之马来西亚电商市场详解-海鲸跨境