用Java解决最大公约数与最小公倍数问题
目录
1.最大公约数
2.最小公倍数
1.最大公约数
题目:求两个正整数的最大公约数。
解题思路:最大公约数我们可以利用循环的算法来计算。意思就是说,比如有两个数字a,b(a>b),它们的最大公约数肯定不会大于其中最小的那一个,即不会大于b。所以我们可以利用循环算法不断地对数字a,b从1-b进行整除,看结果是否同时为0,直到找到那个最大的数字可以结果同时为0的情况。
方法一:
注意事项:
a.循环算法是从1~b进行整除的,不能将此变量设置为从0开始,否则运行时会报错(by zero);
b.其实在编程时我们不需要一次性将所需变量全部设置出来,可以根据思路一边写一遍设置,防止思维混乱。
所以我们可得到如下代码:
import java.util.Scanner;
public class TestDome {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
Scanner scanner1 = new Scanner(System.in);
int b = scanner1.nextInt();
int c = 0;
int i = 1;
int result=0;
if(a>b){
c=b;
}else{
c=a;
}
while(i<=c){
if(a % i ==0 && b % i ==0){
result = i;
}
i++;
}
System.out.println("最大公约数为" + result);
}
}
运行结果如下:

方法二:
解题思路:辗转相除法。举例:12 和18 18 和 6
步骤一:先判断a除以b是否为0,要是为0,结果直接输出为b(也就是a,b两个中最小的数字)。
步骤二:如果不是0,则用除数作为新的被除数,余数作为新的除数,直到相除结果为0为止。(所以这里需要用到循环)
也就是将b赋给a,将余数c赋给b,直到相除结果为0为止,结果直接输出为b。
所以我们可得到如下代码:
import java.util.Scanner;
public class TestDome {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
Scanner scanner1 = new Scanner(System.in);
int b = scanner1.nextInt();
int c =0;
while(a % b != 0){
c =a%b;
a =b;
b =c;
}
System.out.println("最大公约数:"+ b);
}
}
运行结果如下:
2.最小公倍数
题目:求两个正整数的最小公倍数。
解题思路:最小公倍数 = 两数的乘积 / 最大公约数。
所以我们可得到如下代码:
import java.util.Scanner;
public class TestDome {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
Scanner scanner1 = new Scanner(System.in);
int b = scanner1.nextInt();
int c = 0;
int i = 1;
int result=0;
if(a>b){
c=b;
}else{
c=a;
}
while(i<=c){
if(a % i ==0 && b % i ==0){
result = i;
}
i++;
}
int result1=a* b/ result;
System.out.println("最小公倍数为" + result1);
}
}
运行结果如下: