短除法

引用:http://baike.baidu.com/view/915249.htm

短除法是求最大公约数的一种方法,也可用来求最小公倍数。求几个数最大公约数的方法,开始时用观察比较的方法,即:先把每个数的约数找出来,然后再找出公约数,最后在公约数中找出最大公约数。

 

目录

基本方法
注意事项
举例说明
 

编辑本段基本方法

  

 

  短除符号就是除号倒过来。短除就是在除法中写除数的地方写两个数共有的质因数,然后落下两个数被公有质因数整除的商,之后再除,以此类推,直到结果互质为止(两个数互质)。
 
  而在用短除计算多个数时,对其中任意两个数存在的因数都要算出,其它没有这个因数的数则原样落下。直到剩下每两个都是互质关系。
 
  求最大公约数便乘一边,求最小公倍数便乘一半。
 

编辑本段注意事项

  在用短除计算多个数时,对其中任意两个数存在的因数都要算出,其它没有这个因数的数则原样落下。直到剩下每两个都是互质关系。求最大公约数便乘一边,求最小公倍数便乘一半。这种方法对求两个以上数的最大公因数,特别是数目较大的数,显然是不方便的。于是又采用了给每个数分别 分解质因数的方法。
 

编辑本段举例说明

  例如:求12与18的最大公约数。
 
  短除法例题
 
  12的 约数有:1、2、3、4、6、12。
 
  18的约数有:1、2、3、6、9、18。
 
  12与18的公约数有:1、2、3、6。
 
  12与18的最大公约数是6。
 
  这种方法对求两个以上数的最大公约数,特别是数目较大的数,显然是不方便的。于是又采用了给每个数分别分解质因数的方法。
 
  12=2×2×3
 
  18=2×3×3
 
  12与18都可以分成几种形式不同的 乘积,但分成质因数连乘积就只有以上一种,而且不能再分解了。所分出的质因数无疑都能 整除原数,因此这些质因数也都是原数的约数。从分解的结果看,12与18都有公约数2和3,而它们的乘积2×3=6,就是 12与18的最大公约数。
 
  采用分解质因数的方法,也是采用短除的形式,只不过是分别短除,然后再找公约数和最大公约数。如果把这两个数合在一起短除,则更容易找出公约数和最大公约数。
 
  从短除中不难看出,12与18都有公约数2和3,它们的乘积2×3=6就是12与18的最大公约数。与前边分别分解质因数相比较,可以发现:不仅结果相同,而且短除法竖式左边就是这两个数的公共质因数,而两个数的最大公约数,就是这两个数的公共质因数的连乘积。
 
  实际应用中,是把需要计算的两个或多个数放置在一起,进行短除。
 
  在计算多个数的最小公倍数时,对其中任意两个数存在的约数都要算出,其它无此约数的数则原样落下。最后把所有约数和最终剩下无法 约分的数连乘即得到最小公倍数。
### 关于短除法算法的伪代码实现 短除法是一种用于求解两个整数的最大公约数(GCD)的方法。它通过逐步分解质因数来简化计算过程,最终得到两者的最大公约数。 以下是基于短除法原理设计的一个伪代码实现: ```plaintext function gcd_short_division(a, b): if a == 0 or b == 0: return max(a, b) # 如果其中一个数为零,则返回另一个数作为结果[^5] common_factors = [] # 存储公共因子 divisor = 2 # 初始除数设为2 while True: divisible_a = (a % divisor == 0) # 检查a是否能被divisor整除 divisible_b = (b % divisor == 0) # 检查b是否能被divisor整除 if divisible_a and divisible_b: # 当前divisor是两者共同的因子 common_factors.append(divisor) a //= divisor # 更新a b //= divisor # 更新b elif not divisible_a and not divisible_b: # 如果当前divisor不是任何一方的因子,则尝试下一个可能的因子 divisor += 1 # 跳过偶数优化性能(除了2以外) if divisor > 2 and divisor % 2 == 0: divisor += 1 # 终止条件:当无法再找到新的公因子时退出循环 if a == 1 or b == 1: break result = 1 for factor in common_factors: result *= factor # 将所有公共因子相乘得到最大公约数 return result ``` 上述伪代码实现了短除法的核心逻辑,即不断寻找输入数值的公共因子,并将其累乘以获得最大公约数的结果[^6]。 #### 解释 - **初始状态**:设定`common_factors`为空列表存储所有的公共因子;初始化`divisor=2`表示从最小素数开始试探。 - **核心判断**:利用模运算检测当前试商能否同时整除给定的两个参数值 `a` 和 `b` 。如果是的话就记录下这个共享因子并将原数据相应缩小规模继续迭代下去直至找不到更多匹配项为止或者某个变量降到了单位量级(等于1). - **终止条件**:一旦任意一个操作对象缩减至单一单元级别(`a==1 OR b==1`)即可结束整个流程因为此时不可能存在更大的共约数了. --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值