import java.util.Scanner;
/*
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
比如:12和20的最大公约数是4,最小公倍数是60。
最下面有思路分析过程
*/
public class ForTest2 {
public static void main(String[] args){
Scanner scan =new Scanner(System.in);
System.out.println("请输入第一个正整数");
int m=scan.nextInt();
System.out.println("请输入第二个正整数");
int n=scan.nextInt();
//最大公约数
int min=(m<n)?m:n;
for(int i=min;i>=1;i--) {
if (m % i == 0 && n % i == 0) {
System.out.println("最大公约数是:"+i);
break;
}
}
//最小公倍数
int max=(m>n)?m:n;
for(int i=max;i<=m*n;i++){
if(i%m==0 && i%n==0){
System.out.println("最小公倍数是:"+i);
break;
}
}
}
}
/*
求最大公约数的思路
①找到他们的公约数
if(m%i==0 && n%i==0){
System.out.println(i);//得到他俩之间的几个公约数
//eg:12和20;他俩之间的几个公约数是:1、2、4
}
②i 是几,i的范围
i一定小于等于两个正整数之间的最小值,所以求m和n的最小值
int min=(m<n)?m:n;//三元运算符
所以 i<=min; //eg:12和20; i<=12;
③当i=12时,需要判断m%i==0 && n%i==0;
当i=11时,需要判断m%i==0 && n%i==0;
当i=10时,也需要判断m%i==0 && n%i==0;
......
所以要使用for循环结构
④使用for(int i=min;i>=1;i--){},并结合使用break语句
如果使用for(int i=0;i<=min;i++){
if(m%i==0 && n%i==0){
System.out.println(i);
}
}//只能得到他俩之间的几个公约数,1、2、4
而使用for(int i=min;i>=1;i--){},能使他们的公约数从小到大输出,2
再结合使用break语句跳出循环,就得到最大公约数了
⑤最终代码for循环的代码
for(int i=min;i>=1;i--){
if(m%i==0 && n%i==0){
System.out.println(i);
break;//一但找到一个就退出
}
}
*/
输入两个正整数m和n,求其最大公约数和最小公倍数。有思路分析过程
最新推荐文章于 2023-03-20 21:25:37 发布
这是一个Java程序,用于输入两个正整数m和n,然后计算它们的最大公约数和最小公倍数。程序通过for循环结构和条件判断找到最大公约数和最小公倍数,并使用三元运算符优化了代码效率。最大公约数通过不断缩小范围的循环找到,最小公倍数则通过遍历大于最大数直至两数乘积的范围找到。
摘要由CSDN通过智能技术生成