求两个数的最大公约数和最小公倍数(3种算法)

本文介绍了使用Java编程语言计算两个数的最大公约数(GCD)和最小公倍数(LCM)的三种不同算法:欧几里得算法、辗转相除法和更相减损法。详细讲解了每种算法的原理,并提供了相应的代码示例,帮助读者理解和应用这些算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

程序:
import java.util.Scanner;
import java.util.regex.Pattern;

public class number {
    public  int num1;
    public  int num2;
    public  int num3;

    //辗转相除法求最大公因数
    public int div() {
        int a, b, c;
        a = num1;
        b = num2;
        while (a % b != 0) {
            c = a%b;
            a = b;
            b = c;
        }
        return b;
    }

    //辗转相减法求最大公因数
    public int sub() {
        int a, b;
        a = num1;
        b = num2;
        while (a != b) {
            if (a > b) {
                a = a - b;
            } else b = b - a;
        }
        return b;
    }

    //穷举法求最大公因数
    public int qju() {
        int a, b, temp;
        a = num1;
        b = num2;
        if (a > b) temp = b;
        else temp = a;
        while (a % temp != 0 || b % temp != 0) {
            temp--;
        }
        return temp;
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        number n = new number(); //创建对象
        int d, s, q;    //分别是3种方法求出的最大公约数
        String m1, m2; //输入的两个数
        boolean n1 = false, n2 = false; //进行输入数字判断时的参数
        //判断输入第一个数是否有问题
        while (!n1) {
            System.out.println("请输入第1个数");
            m1 = in.next();
            Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
            n1 = pattern.matcher(m1).matches();
            if (n1 == true) {
                int temp = Integer.parseInt(m1);
                if (temp > 0) n.num1 = temp;
                else {
                    n1 = false;
                    System.out.println("输入有误,请重新输入:");
                }
            }
            else System.out.println("输入有误,请重新输入:");
        }
        //判断输入第二个数是否有问题
        while (!n2) {
            System.out.println("请输入第2个数");
            m2 = in.next();
            Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
            n2 = pattern.matcher(m2).matches();
            if (n2 == true) {
                int temp = Integer.parseInt(m2);
                if (temp > 0) n.num2 = temp;
                else {
                    n2 = false;
                    System.out.println("输入有误,请重新输入:");
                }
            }
        }

        d = n.div();
        s = n.sub();
        q = n.qju();

        System.out.println("辗转相除法求出来" + n.num1 + "和" + n.num2 + "的最大公约数为" +  d);
        System.out.println("辗转相减法求出来" + n.num1 + "和" + n.num2 + "的最大公约数为" + s);
        System.out.println("穷举法求出来" + n.num1 + "和" + n.num2 + "的最大公约数为" +  q);

        System.out.println("辗转相除法求出来" + n.num1 + "和" + n.num2 + "的最小公倍数为" + n.num1 * n.num2 / d);
        System.out.println("辗转相减法求出来" + n.num1 + "和" + n.num2 + "的最小公倍数为" + n.num1 * n.num2 /s);
        System.out.println("穷举法求出来" + n.num1 + "和" + n.num2 + "的最小公倍数为" + n.num1 * n.num2 / q);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值