您的位置:首页 > 编程语言 > Java开发

java求两个数的最大公约数和最小公倍数

2017-10-17 22:54 232 查看
解题思路:

1.求最大公约数用辗转相除法。将较大的那个数对较小的那个数取余(如果a>=b,那就a%b),取余得出的结果为下次运算的除数,上面较小的那个数将作为被除数

直到运算到较小为0时,返回较大的数,这个数就是最大公约数。

2.最小公倍数就是 原来的两个正整数的积除以最大公约数

具体代码如下:

/*方法一:*/
package Main;

import java.util.Scanner;

public class Solution {
public static void main(String[] args) {
System.out.println("请输入两个整数:");
Scanner input1 =new Scanner(System.in);
int a = input1.nextInt();
int b =input1.nextInt();
int u= a*b; //  用u来保存 a*b 的值
while(b>0) {
if(a>=b&&a%b!=0){
int t = b;
b = a%b; // 利用了递归算法
a = t;
}else if(a%b==0){
break; // a刚好是b的倍数
}else{
int s = a; // 当  a < b 时 ,a b的值交换
a = b;
b = s;
}
}

System.out.println("两个数的最大公约数为:"+b);
System.out.println("两个数的最小公倍数为:"+u/b);
}
}

/*方法二,欧几里德算法(辗转相除法)*/
package Main;

import java.util.Scanner;

public class Solution {
int divisor(int m,int n)//递归方法
{
if (m % n == 0) {
return n;
}
else {
return divisor(n,m % n);
}
}
public static void main(String[] args) {
System.out.println("请输入两个整数:");
Scanner input1 =new Scanner(System.in);
int a = input1.nextInt();
int b =input1.nextInt();
int u= a*b; //  用u来保存 a*b 的值
Solution s = new Solution();
int result;
result = s.divisor(a, b);
System.out.println("两个数的最大公约数为:"+result);
System.out.println("两个数的最小公倍数为:"+u/result);
}
}


欧几里德算法介绍:

https://baike.baidu.com/item/%E6%AC%A7%E5%87%A0%E9%87%8C%E5%BE%B7%E7%AE%97%E6%B3%95?fr=aladdin
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: