求解最大公约数和最小公倍数

本篇博客将介绍如何求解两个正整数的最大公约数(GCD)和最小公倍数(LCM)。

什么是最大公约数和最小公倍数?

  • 最大公约数(GCD): 两个或多个整数共有约数中最大的一个。
  • 最小公倍数(LCM): 两个或多个整数公有的倍数中最小的一个。

如何求解最大公约数?

我们可以使用**辗转相除法(欧几里得算法)**高效地求解最大公约数。

算法步骤:

  1. 取两个数中较大的数作为被除数,较小的数作为除数。
  2. 将除数除以被除数,得到余数。
  3. 如果余数为0,则除数即为最大公约数。
  4. 如果余数不为0,则将除数作为新的被除数,余数作为新的除数,重复步骤2-3。

如何求解最小公倍数?

得到最大公约数后,我们可以利用以下公式快速计算最小公倍数:

LCM(A, B) = (A * B) / GCD(A, B)

代码实现:

以下是用 Python, Java 和 C++ 实现求解最大公约数和最小公倍数的代码示例:

Python:

def gcd(a, b):
  while b:
    a, b = b, a % b
  return a

def lcm(a, b):
  return (a * b) // gcd(a, b)

# 读取输入
a = int(input('请输入第一个正整数:'))
b = int(input('请输入第二个正整数:'))

print(f'最大公约数:{gcd(a, b)}')
print(f'最小公倍数:{lcm(a, b)}')

Java:

import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.print('请输入第一个正整数:');
    int a = input.nextInt();
    System.out.print('请输入第二个正整数:');
    int b = input.nextInt();

    System.out.println('最大公约数:' + gcd(a, b));
    System.out.println('最小公倍数:' + lcm(a, b));
  }

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

C++:

#include <iostream>
using namespace std;

int gcd(int a, int b) {
  while (b != 0) {
    int temp = a % b;
    a = b;
    b = temp;
  }
  return a;
}

int lcm(int a, int b) {
  return (a * b) / gcd(a, b);
}

int main() {
  int a, b;
  cout << '请输入第一个正整数:';
  cin >> a;
  cout << '请输入第二个正整数:';
  cin >> b;

  cout << '最大公约数:' << gcd(a, b) << endl;
  cout << '最小公倍数:' << lcm(a, b) << endl;
  return 0;
}

通过以上代码,您可以轻松计算任意两个正整数的最大公约数和最小公倍数。

求最大公约数和最小公倍数:算法与代码实现

原文地址: https://www.cveoy.top/t/topic/1qn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录