【详解】使用java解决-输入两个正整数m和n,求其最大公约数和最小公倍数。

举报
皮牙子抓饭 发表于 2026/01/12 17:54:15 2026/01/12
【摘要】 使用Java解决 - 输入两个正整数m和n,求其最大公约数和最小公倍数在编程中,计算两个正整数的最大公约数(Greatest Common Divisor, GCD)和最小公倍数(Least Common Multiple, LCM)是非常常见的问题。本文将介绍如何使用Java语言来实现这一功能。1. 理论基础1.1 最大公约数 (GCD)最大公约数是指能够同时整除两个或多个整数的最大正整数...

使用Java解决 - 输入两个正整数m和n,求其最大公约数和最小公倍数

在编程中,计算两个正整数的最大公约数(Greatest Common Divisor, GCD)和最小公倍数(Least Common Multiple, LCM)是非常常见的问题。本文将介绍如何使用Java语言来实现这一功能。

1. 理论基础

1.1 最大公约数 (GCD)

最大公约数是指能够同时整除两个或多个整数的最大正整数。例如,12和16的最大公约数是4。

1.2 最小公倍数 (LCM)

最小公倍数是指能够被两个或多个整数同时整除的最小正整数。例如,12和16的最小公倍数是48。

1.3 关系

最大公约数和最小公倍数之间存在一个重要的数学关系: \[ \text{GCD}(a, b) \times \text{LCM}(a, b) = a \times b \]

2. 实现方法

2.1 求最大公约数

求最大公约数可以使用欧几里得算法(Euclidean Algorithm),该算法基于以下原理:

  • \(\text{GCD}(a, b) = \text{GCD}(b, a \% b)\),其中 \(a \% b\) 表示 \(a\) 除以 \(b\) 的余数。
  • 当 \(b\) 为0时,\(\text{GCD}(a, 0) = a\)。

2.2 求最小公倍数

根据上述的关系式,可以通过最大公约数来计算最小公倍数: \[ \text{LCM}(a, b) = \frac{a \times b}{\text{GCD}(a, b)} \]

3. Java代码实现

下面是一个完整的Java程序,用于计算两个正整数的最大公约数和最小公倍数:

import java.util.Scanner;

public class GCDAndLCM {
    // 计算最大公约数的方法
    public static int gcd(int a, int b) {
        if (b == 0) {
            return a;
        }
        return gcd(b, a % b);
    }

    // 计算最小公倍数的方法
    public static int lcm(int a, int b) {
        return (a * b) / gcd(a, b);
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入第一个正整数 m:");
        int m = scanner.nextInt();

        System.out.println("请输入第二个正整数 n:");
        int n = scanner.nextInt();

        int gcdResult = gcd(m, n);
        int lcmResult = lcm(m, n);

        System.out.println("最大公约数: " + gcdResult);
        System.out.println("最小公倍数: " + lcmResult);

        scanner.close();
    }
}

4. 运行结果

假设输入的两个正整数分别为12和16,程序的运行结果如下:

请输入第一个正整数 m:
12
请输入第二个正整数 n:
16
最大公约数: 4
最小公倍数: 48


这篇文章详细介绍了如何使用Java来计算两个正整数的最大公约数和最小公倍数,包括理论基础、实现方法和具体的代码示例。希望对您有所帮助!当然可以!下面是一个Java程序,用于计算两个正整数的最大公约数(GCD)和最小公倍数(LCM)。这个程序使用了欧几里得算法来计算最大公约数,并利用最大公约数来计算最小公倍数。

Java代码示例

import java.util.Scanner;

public class GCDLCDCalculator {

    // 方法:计算两个数的最大公约数 (GCD)
    public static int gcd(int a, int b) {
        while (b != 0) {
            int temp = b;
            b = a % b;
            a = temp;
        }
        return a;
    }

    // 方法:计算两个数的最小公倍数 (LCM)
    public static int lcm(int a, int b) {
        return (a / gcd(a, b)) * b;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 输入两个正整数
        System.out.print("请输入第一个正整数 m: ");
        int m = scanner.nextInt();
        System.out.print("请输入第二个正整数 n: ");
        int n = scanner.nextInt();

        // 计算并输出最大公约数和最小公倍数
        int gcdResult = gcd(m, n);
        int lcmResult = lcm(m, n);

        System.out.println("最大公约数 (GCD) 是: " + gcdResult);
        System.out.println("最小公倍数 (LCM) 是: " + lcmResult);

        scanner.close();
    }
}

代码解释

  1. gcd方法
  • 使用欧几里得算法(辗转相除法)来计算两个数的最大公约数。
  • 算法的基本思想是:​​gcd(a, b) = gcd(b, a % b)​​,直到 ​​b​​ 为 0,此时 ​​a​​ 就是最大公约数。
  1. lcm方法
  • 利用最大公约数来计算最小公倍数。
  • 公式:​​lcm(a, b) = (a * b) / gcd(a, b)​​。
  1. main方法
  • 使用 ​​Scanner​​ 类从用户那里读取两个正整数 ​​m​​ 和 ​​n​​。
  • 调用 ​​gcd​​ 和 ​​lcm​​ 方法计算最大公约数和最小公倍数。
  • 输出结果。

运行示例

假设用户输入 ​​12​​ 和 ​​18​​:

请输入第一个正整数 m: 12
请输入第二个正整数 n: 18
最大公约数 (GCD) 是: 6
最小公倍数 (LCM) 是: 36


在Java中,求解两个正整数的最大公约数(GCD)和最小公倍数(LCM)是一个常见的问题。我们可以使用欧几里得算法来计算最大公约数,然后利用最大公约数来计算最小公倍数。

欧几里得算法

欧几里得算法是一种用于计算两个整数最大公约数的高效算法。其基本思想是:

  • ​gcd(a, b) = gcd(b, a % b)​​,其中 ​​a % b​​ 是 ​​a​​ 除以 ​​b​​ 的余数。
  • 当 ​​b​​ 为0时,​​gcd(a, 0) = a​​。

最小公倍数

最小公倍数可以通过以下公式计算:

  • ​lcm(a, b) = (a * b) / gcd(a, b)​

Java代码实现

import java.util.Scanner;

public class GCDAndLCM {
    // 计算最大公约数的方法
    public static int gcd(int a, int b) {
        while (b != 0) {
            int temp = b;
            b = a % b;
            a = temp;
        }
        return a;
    }

    // 计算最小公倍数的方法
    public static int lcm(int a, int b) {
        return (a * b) / gcd(a, b);
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 输入两个正整数
        System.out.print("请输入第一个正整数 m: ");
        int m = scanner.nextInt();
        System.out.print("请输入第二个正整数 n: ");
        int n = scanner.nextInt();

        // 计算最大公约数和最小公倍数
        int gcdResult = gcd(m, n);
        int lcmResult = lcm(m, n);

        // 输出结果
        System.out.println("最大公约数 (GCD) 是: " + gcdResult);
        System.out.println("最小公倍数 (LCM) 是: " + lcmResult);

        scanner.close();
    }
}

代码解释

  1. gcd方法:使用欧几里得算法计算两个整数的最大公约数。
  2. lcm方法:通过最大公约数计算两个整数的最小公倍数。
  3. main方法
  • 使用 ​​Scanner​​ 类从用户输入获取两个正整数 ​​m​​ 和 ​​n​​。
  • 调用 ​​gcd​​ 方法计算最大公约数。
  • 调用 ​​lcm​​ 方法计算最小公倍数。
  • 输出计算结果。

示例运行

假设用户输入 ​​m = 12​​ 和 ​​n = 18​​,程序的输出将是:

请输入第一个正整数 m: 12
请输入第二个正整数 n: 18
最大公约数 (GCD) 是: 6
最小公倍数 (LCM) 是: 36

这个程序简单明了,能够有效地计算两个正整数的最大公约数和最小公倍数。希望这对你有帮助!如果有任何问题或需要进一步的解释,请随时告诉我。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。