高分悬赏:Java语言计算三个数的最大公约数和最小公倍数怎么计算的呢

高分悬赏:Java语言计算三个数的最大公约数和最小公倍数怎么计算的呢
高分悬赏:Java语言计算三个数的最大公约数和最小公倍数怎么计算的呢

这里有一篇可以参考哈:https://blog.csdn.net/gpdkq127/article/details/82527911
这里贴代码不太好阅读,完整的博客看起来更清晰。

转载自:
java语言求最小公倍数和最大公约数的三种算法

import java.util.Scanner;


public class Muitipie {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("input x :");
        int x = in.nextInt();
        System.out.print("input y :");
        int y = in.nextInt();

        int z = Method(x,y);
        System.out.println("辗转相除法:");
        System.out.println("divisor : "+z);
        System.out.println("multiple : "+(x*y/z));

        System.out.println("相减法:");
        z = Subtraction(x,y);
        System.out.println("divisor : "+z);
        System.out.println("multiple : "+(x*y/z));

        System.out.println("穷举法:");
        z = divisor(x,y);
        System.out.println("divisor : "+divisor(x,y));
        z=multiple(x,y);
        System.out.println("multiple : "+multiple(x,y));
    }

    //辗转相除法:返回公约数
    public static int Method(int x,int y){
        int a,b,c;
        a=x;
        b=y;
        while(b!=0){
            c=a%b;
            a=b;
            b=c;
        }
        return a;
    }
    //相减法
    public static int Subtraction(int x,int y){
        while(x!=y){
            if(x>y){
                x=x-y;
            }
            else{
                y=y-x;
            }
        }
        return x;
    }
    //穷举法  求公约数
    public static int divisor(int x,int y){
        int z;
        for(z=x;z>0;z--){
            if(x%z==0&&y%z==0){
                break;
            }
        }
        return z;
    }
    //求公倍数
    public static int multiple(int x,int y){
        int z;
        for(z=x;;z++){
            if(z%x==0&&z%y==0){
                break;
            }
        }
        return z;
    }

}
package yrq.play;
import java.util.Scanner;
public class Text{
private static int x;
private static int y;
private static int z;
public static void main(String [] arrgs){
meun();
}
public  static void meun(){
    System.out.println("您要选择求最大公约数(输入0)还是最小公倍数(输入1)?");
    Scanner scanner = new Scanner(System.in);
    int or=scanner.nextInt();
    if (or==0){
        System.out.println("请选择序号:1.穷举法;2.欧几里得算法;3.辗转相减法");
        int or2=scanner.nextInt();
        if(or2==1){
            addNum();
            jisuan1();
            meun();
        }
        else if(or2==2){
            addNum();
            jisuan2();
            meun();
        }
        else if(or2==3){
            addNum();
            int bigDiv = getBigDiv(x, y);
            int bigDiv1 = getBigDiv(bigDiv, z);
            System.out.println("最大公约数为:"+bigDiv1);
            meun();
        }
        else {
            System.out.println("没有该选项");
            meun();
        }

    }
    else if(or==1){
        System.out.println("请选择序号:1.欧几里得算法;2.穷举法");

        int or3=scanner.nextInt();
        if(or3==1){
            addNum();
            int smallMul = getSmallMul(x, y);
            int smallMul1 = getSmallMul(smallMul, z);
            System.out.println("最小公倍数为"+smallMul1);
            meun();

        }
        else if(or3==2){
            addNum();
            int max=x>y?x:y;
            max=max>z?max:z;
            for (;;max++){
                if(max%x==0&&max%y==0&&max%z==0){
                    System.out.println("最小公倍数为"+max);
                    meun();
                }
            }

        }
        else {
            System.out.println("没有该选项");
            meun();
        }
    }
    else{
        System.out.println("没有此选择");
        meun();
    }
}

public static void addNum(){
    System.out.println("请输入要求的3个数");
    Scanner scanner=new Scanner(System.in);
    x=scanner.nextInt();
    y=scanner.nextInt();
    z=scanner.nextInt();

}
public static int getSmallMul(int a, int b) {// 求两个数的最小公倍数

    return (a * b) / getBigDiv(a, b);
}

public static int getBigDiv(int a, int b) {// 求两个数的最大公约数
    if (b == 0)
        return a;
    return getBigDiv(b, a % b);
}
public static void jisuan1(){
    int j=1;
    for(int i=1;i<=x&&i<=y&&i<=z;i++) {

        if (x % i == 0 && y % i == 0 && z % i == 0) {
            j = i;
        }
    }

    System.out.println("这三个数的最大公约数为:" +j);

}
public static void jisuan2(){
    int j=0;
    while (y != 0) {
        j=x%y;
        x=y;
        y=j;
    }
    j=0;
    while (z!=0){
        j=x%z;
        x=z;
        z=j;
    }
    System.out.println("这三个数的最大公约数为:" +x);

}