最大公约数和最小公倍数及二者之间的联系(java)
来源:互联网 发布:js获取div title属性 编辑:程序博客网 时间:2024/06/06 01:55
求两个数的最小公倍数和最大公约数是最基本也是最经典的算法之一。现在我们来介绍一下这两个算法的思想,以及最小公倍数和最大公约数之间的联系(这是很多人忽略的)。最后我们会用java来实现这两个算法。
最大公约数:
求最大公约数一般采用欧几里德算法。
欧几里德算法又称辗转相除法, 用于计算两个整数a, b的最大公约数。其计算原理依赖于下面的定理:
定理: gcd(a, b) = gcd(b, a mod b) //此函数作用是求最大公约数
代码如下:
if(m<n)
{
int t=m;
m=n;
n=t;
}
for(int i=n;i<=m*n;i++)
{
if(i%m==0 && i%n==0)
{
System.out.println("最小公倍数为"+i);
break;
}
}
或者用辗转相减:
public static void main(String[] args) {
System.out.println("(求最大公约数)请依次输入两个数的值:");
Scanner s = new Scanner(System.in);
int a = s.nextInt();
int b = s.nextInt();
System.out.println(a+"和"+b+"的最大公约数是:"+caculate(a,b));
}
private static int caculate(int a, int b) {
while(a != b){
if(a > b){
a = a - b;
}
else{
b = b - a;
}
}
return a;
}
最大公约数:
最大公约数好像就没有例如欧几里得算法这样的现成算法了,那怎么办呢?
别急,因为实际上最大公约数和最小公倍数之间有着某种不可言喻的关系的!!!
假如有a,b两个数。我们把a看成由两部分组成的:a和b的共有部分(最大公约数),a的私有部分。b也看成:a和b的共有部分和b的私有部分。
最大公约数,即是两个数的公共部分(所有);最小公倍数,即是a的私有部分 * b的私有部分 * ab共有部分
所以我们找到了最小公倍数和最大公约数之间的关系:最大公约数 * 最小公倍数 = a * b ;
代码就简单了,只需对之前代码稍加改造:
public static void main(String[] args){
System.out.println("(求最小公倍数)请依次输入两个数的值:");
Scanner s = new Scanner(System.in);
int a = s.nextInt();
int b = s.nextInt();
System.out.println(a+"和"+b+"的最小公倍数是:"+caculate(a,b));
}
private static int caculate(int a, int b) {
int originalA = a;
int originalB = b;
while(a != b){
if(a > b){
a = a - b;
}
else{
b = b - a;
}
}
return originalA*originalB/a;
}
- 最大公约数和最小公倍数及二者之间的联系(java)
- Java最大公约数和最小公倍数
- java:最小公倍数和最大公约数
- 最大公约数和最小公倍数(java实现)
- 最大公约数和最小公倍数解法(java)
- 求最大公约数和最小公倍数(java语言)
- Java求最大公约数和最小公倍数
- Java实现最小公倍数和最大公约数
- java求两数最大公约数和最小公倍数
- java求最小公倍数和最大公约数
- Java求最大公约数和最小公倍数
- java 求最大公约数和最小公倍数
- JAVA算法---最大公约数和最小公倍数
- 最大公约数和最小公倍数 in Java
- Java求最大公约数和最小公倍数
- java求最大公约数和最小公倍数
- Java求最大公约数和最小公倍数
- JAVA实现最大公约数和最小公倍数
- 一个移动开发者的自述
- c#(未测试)--C#写的winform调用webservice小软件
- poj 1125 Stockbroker Grapevine
- how-to setup apache on mac
- java中关键字volatile的作用 编辑
- 最大公约数和最小公倍数及二者之间的联系(java)
- 不错的提醒应用程序
- 中国哲学简史-冯友兰
- Android Layout Tricks #3: Optimize, Part 1
- MFC 判断一个窗口是否是可见状态
- hdu 3335 (最小路径覆盖)
- .net中的认证(authentication)与授权(authorization)
- 注意区分啊~这里求的的事公共子串不是子序列。NOJ308-Substring
- CTime 类型详解