关于短除法求两个数的最小公倍数的公式的解释

关于短除法求两个数的最小公倍数的公式的解释

  1. 公式: 两个数的乘积 = 两数的最小公倍数 x 最大公约数

例如: 求 18 和 366 的最小公倍数
假设:
1.前面已经求出最大公约数 为 6
2.最小公倍数为 k
那么:
18 * 366 = k * 6
k = 18 * 366 / 6
k = 1098

  1. 短除法求最小公倍数: 把短处号左边的所有质因数和短处号下面的两个数相乘

在这里插入图片描述
18 和 366 的最小公倍数 用短除法 可以得到: 2 * 3 * 3 * 61 = 1098
18 和 366 的最大公约数 用短除法 可以得到: 2 * 3 = 6

3. 公式 2 求证过程

假设有两个数 m 和 n 其公因数分别为(以下相乘的部分*省略):
m = abe
n = abcd
可以看到 ab 是 m n 两个数的最大公约数

现在
想要 ab 变成 m 的倍数 那么 ab 至少需要 乘以 e 才可以
abe 是 m 的倍数
想要 ab 变成 n 的倍数 那么 ab 至少要需要乘以 c 和 d 才可以
abcd 是 n 的倍数
想要 abcd 变成 m 的倍数 至少需要 abcd 乘以 一个数才可以(其实就是乘以e 但现在需要证明这个数就是e)
假设这个数是 x 那么 abcdx 就是 m的倍数
那么 当 x 的值是最小的时候 abcd * x 的值就是 m 的最小公倍数
那么就会有: abcd 乘以 x 可以整除 整数 m : abcdx 对 m 整除的结果是一个整数
写成数学计算式:
abcd * x // m
abcd * x // abe
约去ab 得到 cd * x // e
那么要整除 e cd 所乘的数 至少是 e 才可以完成将 e 约去
即: cd * e // e = cd
因此得到: x 的值就是 e
那么最终得到: abcd * x // m 起始就是 abcd * e // m
因此: 短除号左边 和 下边的所有数乘积 就是 要求的两个数的最小公倍数

写个例子看下:
用短除法 求数字 8 和 36 的最小公约数
在这里插入图片描述
8 = 2 * 2 * 2
36 = 2 * 2 * 9
想让 2 * 2 * 9 变成 8的倍数 而且是最小倍数 那么 2 * 2 * 9 (36) 至少要乘以 2 才可以 (36 * 1 不能整除 8 而 36 * 2 能整除 8)
即: 2 * 2 * 9 * 2 = 72 (到此就可以查看出短除法得到的数字之积就是两个数字的最小公倍数)

4.由第 3 步的推导结果就可以轻易的得到公式 1

接上面的例子:
8 和 36 的最大公约数是 2 * 2 = 4
8 和 36 的最小公倍数是 72
那么 8 * 36 = 72 * 4
得到: 两个数的乘积 = 两数的最小公倍数 x 最大公约数

<个人理解的推导过程 如果在推导的过程中有不合理的地方 欢迎指出 感谢!!!>

### Python 实现个正整数的最大公约数和最小公倍数 在 Python 中,可以使用欧几里得算法(即短除法)来高效地计算个正整数的最大公约数(GCD),并进一步通过数乘积与 GCD 的关系得出其最小公倍数(LCM)。以下是具体实现方式: #### 使用欧几里得算法计算最大公约数 欧几里得算法的核心思想在于不断取模运算直到余数为零。对于任意个正整数 \( a \) 和 \( b \),如果 \( a > b \),则有如下递推公式: \[ \text{gcd}(a, b) = \text{gcd}(b, a \% b), \quad \text{当 } b \neq 0. \] 最终当 \( b = 0 \) 时,\( a \) 即为所的最大公约数。 ```python def gcd(a, b): while b != 0: a, b = b, a % b return a ``` 上述函数实现了基于迭代的欧几里得算法[^2]。 #### 利用最大公约数计算最小公倍数 已知个正整数 \( a \) 和 \( b \) 的最大公约数 \( g \),可以通过以下公式得到它们的最小公倍数 \( l \): \[ l = \frac{|a \cdot b|}{g}. \] 需要注意的是,在实际编程中应避免因中间结果过大而导致溢出问题。因此推荐先执行除法再完成乘法操作。 ```python def lcm(a, b): greatest_common_divisor = gcd(a, b) least_common_multiple = abs(a * b) // greatest_common_divisor return least_common_multiple ``` 此部分逻辑遵循了给定数值间的关系表达式[^3]。 #### 综合示例程序 下面给出一段完整的代码片段,演示如何调用以上定义的功能以获取输入数据对应的解答: ```python if __name__ == "__main__": num1 = int(input("请输入第一个正整数:")) num2 = int(input("请输入第二个正整数:")) result_gcd = gcd(num1, num2) result_lcm = lcm(num1, num2) print(f"{num1} 和 {num2} 的最大公约数是:{result_gcd}") print(f"{num1} 和 {num2} 的最小公倍数是:{result_lcm}") ``` 该脚本允许用户交互式地提供待处理的数据,并展示相应的运算成果[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值