- Python
python 最小公倍数 学习笔记
- 2025-5-3 9:37:02 @
🧮 什么是最小公倍数?
最小公倍数是指两个或多个整数共有的倍数中最小的一个。
例如:
LCM(4, 6) = 12
LCM(6, 8, 12) = 24
✅ 方法一:使用最大公约数(GCD)计算 LCM
数学上,两个数的乘积等于它们的最大公约数与最小公倍数的乘积:
$$\text{LCM}(a, b) = \frac{|a \times b|}{\text{GCD}(a, b)} $$🔢 步骤:
- 使用
math.gcd()
函数计算最大公约数。 - 根据公式计算最小公倍数。
💻 示例代码(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 条评论
-
admin SU @ 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
的函数,该函数接受两个参数,并返回这两个数的最小公倍数。最后,示例部分展示了如何调用这个函数,并打印出结果。第四步:尝试自己动手
你可以尝试修改上面代码中的
num1
和num2
的值,来计算不同数字对的最小公倍数。这是一个非常好的练习方式,可以帮助你更好地理解和记忆这些概念。额外提示
- 如果你想处理多个数字的最小公倍数,可以通过递归地应用两个数字之间的最小公倍数算法。
- 记得多做实验、修改代码,并观察不同的输出结果,这对于学习编程来说是非常有帮助的。
- 1