//求最大公约数
public class Parent {
public int f(int a,int b){
if(a<b){//辗转相除是用大的除以小的。如果a<b,第一次相当a与b值交换
int temp=a;
a=b;
b=temp;
}
while(a%b!=0){
int temp=a%b;
a=b;
b=temp;
}
return b;
}
}
//求最小公倍数
class Child extends Parent{
public int f(int a,int b){
return (a*b)/super.f(a, b); //super调用父类隐藏的方法
}
}
//主控类
import java.util.Scanner;
public class Demotest {
public static void main(String[] args) {
//用辗转相除法求两个数的最大公约数和最小公倍数
/*在数学中,辗转相除法,又称欧几里得算法,是求最大公约数的算法。
两个数求最大公约数,可以用辗转相除法。始终用较大数(被除数)除以较小数(除数),然后用除数代替较大数(被除数),余数代替较小数(除数),代替完后继续让新的被除数除以除数。直到相除余数为0时。最后的除数就是最大公约数。举例:
222 407求最大公约数:
222 407(407除以222余数185)
222 185(222除以185余数37)
37 185(185除以37余数0)
所以最大公约数为37
39 24求最大公约数
39 24(39/24,余数15)
15 24(24/15,余数9)
15 9(15/9,余数6)
6 9(9/6,余数3)
6 3(6/3,余数0)
所以最大公约数为3*/
Scanner sc=new Scanner(System.in);
System.out.println("请输入a:");
int n=sc.nextInt();
System.out.println("请输入b:");
int m=sc.nextInt();
Parent gys=new Parent();
System.out.println(n+","+m+"的最大公约数是:"+gys.f(n, m));
Child gbs=new Child();
System.out.println(n+","+m+"的最小公倍数是:"+gbs.f(n, m));
}
}