【求最大公约数详解】更相减损术和辗转相除法
更相减损术
介绍
更相减损术是出自《九章算术》的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合
步骤
- 任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;
- 以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。
- 第1步中约掉的若干个2的积与第2步中其中一个等数的乘积就是所求的最大公约数
解释
首先 我们设 a>b,gcd(a,b) = ans ,【用2约简】假设有 n 个 2 ,那么 gcd(a- 2*n,b-2 *n),那么最大公约数 ans 素因子分解后一定有 2的 n次方。
【大数减小数】我们知道a%ans=0,b%ans=0,gcd(a-b,b)=ans 不变是因为 a 减去的是 b ,b是 x 倍的 ans。一直迭代 大数减小数,直到两数相等最大公因数就是它(约简后的a,b)本身。最后乘以约简的2
更相减损术时间复杂度高于辗转相除法
辗转相除法
欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。
计算公式 gcd(a,b) = gcd(b,a mod b)。
解释
刚刚说了更相减损术,那更相减损术中的 【大数减小数】若a 远远大于b ,那就需要多次的 gcd(a-b,b),也就是gcd(a-k*b,b)
a - k * b = a%b (k值作为最大值)
【求最大公约数详解】更相减损术和辗转相除法相关推荐
- 更相减损术,辗转相除法
一,更相减损术是出自<九章算术>的一种求最大公约数的算法,它原本是为约分而设计的,适用于任何需要求最大公约数的场合. 证明: 设gcd(x,y)=d,则满足x=k1*d,y=k2*d,易得 ...
- 最大公约数算法_更相减损法_辗转相除法(即欧几里得算法)
package algorithm;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStr ...
- 求最大公约数(更相减损术辗转相除法)
求解最大公约数的多种Way: 1 暴力解决法:M不断自减找到最大公约数. 2 辗转相除法:反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数. 3 更相减损术:若两者都为偶数,进行折半,直到 ...
- 更相减损术程序设计c语言,更相减损术
本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 更相减损术是出自<九章算术>的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合 ...
- 五十六、从高中碾转相除法、更相减损术算法谈起
@Author:Runsen 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题代码化. ---- Runsen 先问你们一个小学问题:如何求两个整数的最大公约数? 曾经见过不少的算法题 ...
- 6.算法之数学(数论)算法——更相减损术
目录 1.什么是更相减损术? 2.数学推导 3.代码实现 4.最小公倍数计算 1.什么是更相减损术? 其使用方法如下 举个例子吧 可见更相减损术和辗转相除法有异曲同工之妙. 其数学原理也是一样的. 2 ...
- 更相减损法java,五十六、从高中碾转相除法、更相减损术算法谈起
「@Author:Runsen」❝ 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化.「---- Runsen」❞ 先问你们一个小学问题:「如何求两个整数的最大公约数?」 曾 ...
- 辗转相除法和更相减损术
高中学过的求大公约数的方法就是辗转相除法和更相减损术了. 辗转相除法递归版 #include <iostream> using std::cin; using std::cout; usi ...
- C语言 用更相减损术求最大公约数,最小公倍数
更相减损术 更相减损术是出自<九章算术>的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合. 出处 <九章算术> 用途 求最大公约数 作用 ...
最新文章
- FFmpeg中AVDictionary介绍
- A星算法(Java实现)
- WIN7中 HttpListener 拒绝访问 异常解决 C#
- map(&:name)在Ruby中是什么意思?
- div+css实现表头固定内容滚动表格
- ASP.NET比较常用的26个性能优化技巧
- centos7 没有pip命令_Linux(CentOS7)部署系列---Docker编排应用部署方案
- windows-vscode编写c/c++(适用日期2020-5月的vscode)--简洁版(下载gdb.exe)
- 单片机编程主函数的特点
- Oracle Minus关键字
- 15款精美的 WordPress 电子商务网站模板
- oracle foreign 查询,ORACLE foreign key
- 位运算初步入门状态压缩操作
- ISO9000认证与互联网转型
- UEFI规范实现EDKII项目学习笔记绪论[0]
- [听风]TBC单体插件数据统计Recount
- 英语口语必备900句
- 扩散模型训练太难?来看看Meta AI最新提出的KNN-Diffusion
- 单核CPU仍然存在线程安全问题
- ARCMAP里面关于地理投影方面的知识
热门文章
- linux下使用QT5.8实现虚拟键盘
- 为什么说支付宝推出余额宝值得赞赏?
- lol最克制诺手的英雄_LOL:最克制诺手的五大英雄,锐雯上榜,第一名能全程吊打诺手!...
- PS瘦脸处理及去黑眼圈
- Android studio连不上手机adb服务开启失败
- 【南阳ACM】 喷泉装置(一)
- Q_DISABLE_COPY、Q_DISABLE_MOVE、Q_DISABLE_COPY_MOVE用法详解及总结
- python应用程序无法正常启动0xc0000142_office显示应用程序无法正常启动0xc0000142怎么解决...
- 上百部BBC经典纪录片,既学英语又涨知识,送给程序员们~~
- Seafood Legacy Co., Ltd.宣布2021年东京可持续海鲜峰会开放报名