🧮 什么是最小公倍数?

最小公倍数是指两个或多个整数共有的倍数中最小的一个。

例如:

  • LCM(4, 6) = 12
  • LCM(6, 8, 12) = 24

✅ 方法一:使用最大公约数(GCD)计算 LCM

数学上,两个数的乘积等于它们的最大公约数与最小公倍数的乘积:

$$\text{LCM}(a, b) = \frac{|a \times b|}{\text{GCD}(a, b)} $$

🔢 步骤:

  1. 使用 math.gcd() 函数计算最大公约数。
  2. 根据公式计算最小公倍数。

💻 示例代码(Python 3.9+):

import math

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

# 示例
print(lcm(4, 6))   # 输出 12
print(lcm(12, 18)) # 输出 36

🔄 方法二:计算多个数的 LCM

我们可以使用 functools.reduce 来对多个数字依次计算 LCM。

💻 示例代码:

import math
from functools import reduce

def lcm_multiple(*numbers):
    return reduce(lambda x, y: x * y // math.gcd(x, y), numbers)

# 示例
print(lcm_multiple(4, 6, 8))      # 输出 24
print(lcm_multiple(3, 5, 7, 9))   # 输出 315

📌 注意事项

  • 输入必须是正整数或负整数(取绝对值即可)。
  • 如果输入包含 0,需要额外处理(因为任何数和 0 的 LCM 都是 0)。

⚠️ 带 0 的处理示例:

def lcm_with_zero_check(a, b):
    if a == 0 or b == 0:
        return 0
    return abs(a * b) // math.gcd(a, b)

🧪 小练习(你可以试试看)

写一个函数,接收任意数量的整数,返回它们的最小公倍数。要求:

  • 忽略为 0 的参数(只考虑非零整数)
  • 如果所有数都为 0,则返回 0

5 条评论

  • @ 2025-5-5 9:36:21
    def gcd_non_recursive(a, b):
        while a % b != 0:
            t = a % b
            a =  b
            b = t
        return b
    def gcd_recursive(a, b):
        if a % b == 0:
            return b
        else:
            return gcd_recursive(b,a%b)
        
    def gcd_recursive2(a, b):
        if b == 0:
            return a
        else:
            return gcd_recursive(b, a % b)
    # 示例
    def gcd_non_recursive2(a, b):
        while b != 0:
            a, b = b, a % b
        return a
    
    # 示例
    print(gcd_non_recursive2(48, 18))  # 输出: 6
    print(gcd_non_recursive(48, 18))  # 输出: 6
    print(gcd_non_recursive(48,18))  # 输出: 6
    print(gcd_recursive(48,18))  # 输出: 6
    print(gcd_recursive2(48,18))  # 输出: 6
    
    
    
    • @ 2025-5-5 9:20:24

      欧几里得算法

      def gcd_non_recursive(a, b):
          while a % b != 0:
              t = a % b
              a =  b
              b = t
          return b
      
      # 示例
      print(gcd_non_recursive(48, 18))  # 输出: 6
      
      • @ 2025-5-3 10:27:19

        通过枚举法求最小公倍数

        a,b = map(int,input().strip().split())
        if  a>b:
            a,b = b,a
        i = 1
        while True:
            if i*a % b==0:
                print(i*a)
                break
            i += 1
        
        
        
        
        
        # 从用户输入中读取一行字符串,去除首尾空格后按空格分割成多个字符串,
        # 再将这些字符串转换为整数,并分别赋值给变量 a 和 b
        a, b = map(int, input().strip().split())
        
        # 如果 a 大于 b,则交换 a 和 b 的值,确保 a 小于等于 b
        if a > b:
            a, b = b, a
        
        # 初始化一个计数器 i,用于逐步尝试不同的倍数
        i = 1
        
        # 进入一个无限循环,直到找到满足条件的最小公倍数为止
        while True:
            # 检查 i 乘以 a 的结果是否能被 b 整除
            if i * a % b == 0:
                # 如果能整除,说明 i * a 就是 a 和 b 的最小公倍数,将其打印输出
                print(i * a)
                # 找到最小公倍数后,使用 break 语句跳出循环
                break
            # 如果不满足条件,将计数器 i 加 1,继续尝试下一个倍数
            i += 1
        #这段代码的主要功能
        #是计算并输出两个整数 a 和 b 的最小公倍数。
        #它通过不断增加 a 的倍数,直到找到一个能被 b 整除的数,
        #这个数就是 a 和 b 的最小公倍数。
        
        • @ 2025-5-3 9:40:07

          理解最小公倍数(LCM, Least Common Multiple)和最大公约数(GCD, Greatest Common Divisor),以及如何使用欧几里得算法来计算它们,是编程学习中的一个重要步骤。即使你是编程新手,下面的内容也将帮助你了解这些概念,并教你如何在Python中实现。

          欧几里得算法简介

          欧几里得算法是一种用于找出两个正整数的最大公约数的方法。其基本原理是:两个整数a和b(假设a > b)的最大公约数等于b和a % b的最大公约数。这个过程会一直重复,直到余数为0为止。

          计算最小公倍数

          最小公倍数可以通过最大公约数来计算:

          Python实现

          1. 使用递归方法实现欧几里得算法计算GCD

          def gcd_recursive(a, b):
              if b == 0:
                  return a
              else:
                  return gcd_recursive(b, a % b)
          
          # 示例
          print(gcd_recursive(48, 18))  # 输出: 6
          

          2. 使用非递归方法实现欧几里得算法计算GCD

          def gcd_non_recursive(a, b):
              while b != 0:
                  a, b = b, a % b
              return a
          
          # 示例
          print(gcd_non_recursive(48, 18))  # 输出: 6
          

          3. 使用GCD来计算LCM

          有了GCD之后,我们可以很容易地计算出两个数的LCM:

          def lcm(a, b):
              return abs(a * b) // gcd_non_recursive(a, b)  # 或者使用gcd_recursive
          
          # 示例
          print(lcm(48, 18))  # 输出: 144
          

          从零开始的学习建议

          • 先理解概念:确保你理解了什么是最大公约数、最小公倍数以及欧几里得算法的基本思想。
          • 动手实践:尝试运行上面提供的代码示例,修改输入值,观察输出结果的变化。
          • 逐步深入:一旦你熟悉了这些基础,可以尝试更复杂的任务,比如编写一个函数来接受任意数量的参数并计算它们的LCM。
          • 探索更多:研究Python标准库math模块中的math.gcd()函数,它是内置的用于计算最大公约数的函数,可用于简化你的代码。

          通过这样的学习路径,即使是编程初学者也能够掌握如何在Python中计算最小公倍数和最大公约数。希望这对你有所帮助!如果有任何问题或需要进一步解释,请随时提问。

          • @ 2025-5-3 9:37:12

            理解最小公倍数(LCM, Least Common Multiple)的概念以及如何在Python中计算它,即使你没有任何编程基础,也可以通过下面的简单步骤来学习。

            什么是最小公倍数?

            最小公倍数指的是两个或更多的整数共有的倍数中最小的一个。例如,6和8的最小公倍数是24,因为这是能同时被6和8整除的最小数字。

            Python中的实现

            第一步:了解必要的函数

            为了计算最小公倍数,我们通常需要先找到两个数的最大公约数(GCD, Greatest Common Divisor),然后利用这个最大公约数来计算最小公倍数。幸运的是,Python的标准库math模块提供了计算最大公约数的功能,我们可以直接使用。

            第二步:安装Python

            如果你还没有安装Python,请访问Python官方网站下载并安装适合你操作系统的版本。

            第三步:编写代码

            下面是一个简单的例子,展示了如何使用Python来计算两个数的最小公倍数:

            import math
            
            # 定义一个函数来计算两个数的最小公倍数
            def lcm(a, b):
                return abs(a * b) // math.gcd(a, b)
            
            # 示例
            num1 = 6
            num2 = 8
            print("The LCM of", num1, "and", num2, "is:", lcm(num1, num2))
            

            这段代码首先导入了math模块,以便可以使用其中的gcd函数来计算最大公约数。接着定义了一个名为lcm的函数,该函数接受两个参数,并返回这两个数的最小公倍数。最后,示例部分展示了如何调用这个函数,并打印出结果。

            第四步:尝试自己动手

            你可以尝试修改上面代码中的num1num2的值,来计算不同数字对的最小公倍数。这是一个非常好的练习方式,可以帮助你更好地理解和记忆这些概念。

            额外提示

            • 如果你想处理多个数字的最小公倍数,可以通过递归地应用两个数字之间的最小公倍数算法。
            • 记得多做实验、修改代码,并观察不同的输出结果,这对于学习编程来说是非常有帮助的。
            • 1