天天看点

用Java解决最大公约数与最小公倍数问题用Java解决最大公约数与最小公倍数问题

用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);
        }
 
    }

           

运行结果如下:

用Java解决最大公约数与最小公倍数问题用Java解决最大公约数与最小公倍数问题

方法二: 

解题思路:辗转相除法。举例: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);


    }
}
           

运行结果如下:

用Java解决最大公约数与最小公倍数问题用Java解决最大公约数与最小公倍数问题

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);
        }
 
    }
           

运行结果如下: 

用Java解决最大公约数与最小公倍数问题用Java解决最大公约数与最小公倍数问题