问题描述
给定两个数a,b,求出a,b的最大公约数,最小公倍数
问题分析:
辗转相除法, 又名欧几里德算法,是求最大公约数的一种方法。它的具体做法是:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止,如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。
最小公倍数就等于这两个数的乘积除以这两个数的最大公约数,那么现在问题的关键就是求这两个数的最大公约数了,下面我们看如何求最大公约数。
代码实现:
1、数据处理代码
public class deal {
/**
* 辗转相除法求最大公约数
* @param a 输入的a
* @param b 输入的b
* @return 返回max,a,b的最大公约数
*/
public int maxG(int a,int b){
int min,max,r;
min= a>b? b:a;
max=b>a? b:a;
while(min!=0){
r=max%min;
max=min;
min=r;
}
return max;
}
/**
* 求最小公倍数
* @param a 输入的a
* @param b 输入的b
* @param max a,b的最大公约数
* @return 返回min,a,b的最小公倍数
*/
public int minG(int a,int b,int max){
int min;
return min=a*b/max;
}
}
2、主函数
public class Main{
public static void main(String[]args){
int a,b;
deal deal=new deal();
Scanner sc=new Scanner(System.in);
System.out.println("请输入两个整数:");
a=sc.nextInt();
b=sc.nextInt();
int max= deal.maxG(a,b);
int min=deal.minG(a,b,max);
System.out.println("a,b的最大公约数是:"+max);
System.out.println("a,b的最小公倍数是:" + min);
}}
3、(1)测试用例:a=6,b=8
结果:a,b最大公约数为:2
a,b最小公倍数为:24
总结
求最大公约数最小公倍数的方法有很多种,本文讲的是辗转相除法,如果你有更好的方法可以评论出来,互相交流学习。