面试题系列:求最大公约数和最小公倍数![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/46df4aadbe1f0036d97ca2fa1496bc92.jpeg#pic_center)
题目:输入两个正整数m和n,求其最大公约数和最小公倍数
那么做题之前先来分析一波:
m和n的最大公约数:m和n的公约数:在[1, m和n中较小的数] 能够把m和n都整除的数
例如:9和21的公约数, 1和3
如何找最大公约数?
从[m和n中较小的数]开始往[1]的方向找,找到的第一个公约数,就是最大公约数
m和n的公倍数:
在[m和n中较大的数,无穷]能够被m和n整除的数
最小公倍数:
在[m和n中较大的数,mn]之间
如何找最小公倍数?
在[m和n中较大的数,mn]之间,找到第一个能被被m和n整除的数
方法:
class Test{
public static void main(String[] args){
//输入两个正整数m和n
java.util.Scanner input = new java.util.Scanner(System.in);
int m;
do{
System.out.print("请输入正整数m:");
m = input.nextInt();
if(m<=0){
System.out.println(m + "不是正整数,正整数是大于零的数。");
}
}while(m<=0);
int n;
do{
System.out.print("请输入正整数n:");
n = input.nextInt();
if(n<=0){
System.out.println(n + "不是正整数,正整数是大于零的数。");
}
}while(n<=0);
//找出m和n中较小的数
//方案一:
//int min = m < n ? m : n;
//方案二:我希望m永远小于或等于n
if(m > n){
int temp = m;
m = n;
n = temp;
}
//到这步为止m <= n
//找最大公约数
for(int i=m; i>=1; i--){
//看这个i是否是m和n的公约数
if(m%i==0 && n%i==0){
System.out.println(i+"是它俩的最大公约数");
break;//找到了就不用找了
}
}
//找最小公倍数
for(int i=n; i<=m*n; i++){
//看i是否是m和n的公倍数
if(i%m==0 && i%n==0){
System.out.println(i+"是它俩的最小公倍数");
break;
}
}
}
}