高中学过的求大公约数的方法就是辗转相除法和更相减损术了。
辗转相除法递归版

#include <iostream>
using std::cin;
using std::cout;
using std::endl;int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }int main() {int n, m;cin >> n >> m;cout << gcd(n, m) << endl;return 0;
}

非递归

#include <iostream>
using std::cin;
using std::cout;
using std::endl;int gcd(int a, int b) {int temp;while (b > 0) {temp = a % b;a = b;b = temp;}return a;
}int main() {int n, m;cin >> n >> m;cout << gcd(n, m) << endl;return 0;
}

更相减损术

#include <iostream>
using std::cin;
using std::cout;
using std::endl;int main() {int a, b;cin >> a >> b;while (a != b) {if (a > b) {a -= b;} else {b -= a;}}cout << a << endl;return 0;
}

比较:
更相减损术和辗转相除法的主要区别在于前者所使用的运算是“减”,后者是“除”。从算法思想上看,两者并没有本质上的区别,但是在计算过程中,如果遇到一个数很大,另一个数比较小的情况,可能要进行很多次减法才能达到一次除法的效果,从而使得算法的时间复杂度退化为O(N),其中N是原先的两个数中较大的一个。相比之下,辗转相除法的时间复杂度稳定于O(logN)。

辗转相除法和更相减损术相关推荐

  1. C++算法:辗转相除法与更相减损术

    辗转相除法与更相减损术 1.我们已经学过求最大公因数的知识,你能求出18与30的公因数吗? 2.如果公因数比较大而且根据我们的观察又不能得到一些公因数,我们又应该怎样求它们的最大公因数?比如求8251 ...

  2. 辗转相除法与更相减损术(求最大公约数)

    辗转相除法:两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数.比如10和25,25除以10商2余5,那么10和25的最大公约数,等同于10和5的最大公约数. ...

  3. C语言复习---获取最大公约数(辗转相除法和更相减损法)

    源自:百度百科 辗转相除法 辗转相除法:辗转相除法是求两个自然数的最大公约数的一种方法,也叫欧几里德算法. 例如,求(319,377): ∵ 319÷377=0(余319) ∴(319,377)=(3 ...

  4. 辗转相除法、更相减损法、Stein算法

    最大公约数和最小公倍数求解,常用的方法是短除法进行因式分解,然后最大公约数是所有公共因子的乘积,最小公倍数是所有因子的乘积. 本质上求最小公倍数就是求最大公倍数:x=m*a, y=m*b:m是最大公约 ...

  5. 初等数论--整除--欧几里得算法/辗转相除法/更相减损术

    初等数论--整除--欧几里得算法/辗转相除法/更相减损术 欧几里得算法/辗转相除法/更相减损术 博主本人是初学初等数论(整除+同余+原根),本意是想整理一些较难理解的定理.算法,加深记忆也方便日后查找 ...

  6. 求最大公约数和最小公倍数——辗转相除法(欧几里得算法)、更相减损术、stein算法

    辗转相除法-- 辗转相除法求最大公约数的原理: 两个整数其中较小的数 和 两数相除(较大数除较小数)的余数(使用递归)的最大公约数. 辗转相除法求最小公倍数的原理: 两个整数分别除以最大公约数的结果相 ...

  7. 更相减损术,辗转相除法

    一,更相减损术是出自<九章算术>的一种求最大公约数的算法,它原本是为约分而设计的,适用于任何需要求最大公约数的场合. 证明: 设gcd(x,y)=d,则满足x=k1*d,y=k2*d,易得 ...

  8. 求最大公约数(更相减损术辗转相除法)

    求解最大公约数的多种Way: 1 暴力解决法:M不断自减找到最大公约数. 2 辗转相除法:反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数. 3 更相减损术:若两者都为偶数,进行折半,直到 ...

  9. 【C语言】辗转相除法+更相减损术+秦九韶算法

    一.辗转相除法 1.简介 辗转相除法又叫欧几里得算法. 假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里得算法,是这样进行的: 1997 / 615 = 3 (余 152) 615 ...

最新文章

  1. python name is not defined_PythonNameError: global name 'NAME' is not not defined这个问题怎么解决?...
  2. 谈谈基于OAuth 2.0的第三方认证 [上篇]
  3. Windows 技术篇-搜狗输入法中文状态下却输入为英文,原因及解决办法。明明是中文却输入不了中文,只能输入英文
  4. 私有云Opetstack的创建与运用
  5. boost::callable_traits添加const成员的测试程序
  6. OpenCV中cvAdds和cvAdd中的mask的用法探讨
  7. C编程实践:简单的通讯录
  8. scheme 微博_可用App URL Schemes
  9. ADI交替差分隐格式求解二维热传导方程
  10. Hamilton哈密顿最短路径(二进制状态压缩)
  11. 电脑使用者必备的文本编辑器,哪款适合你?
  12. 《地理天机一贯 》   聚宝馆手抄珍稀古籍分享
  13. 匈牙利命名法为何被淘汰_体育午报:15年魔咒破除!国足淘汰赛终迎一胜
  14. 网络地址转换——NAT
  15. 设计师需要的知识体系
  16. MACD指标为什么不灵了?试试QMACD
  17. 快乐AK场2 E 删删删越小越好 单调栈
  18. (ICRA 2020) Instance Segmentation of LiDAR Point Clouds
  19. Java培训四个月能学会吗
  20. mysql存图片二进制文件_将图片(二进制文件)存储于数据库,论文件字节流与二进制字符串相互转换...

热门文章

  1. 用日记本文档怎么写html,Win7系统如何使用日记本文档输入文字?
  2. android 访问存储卡,Android:无法访问存储在SD卡中的文件
  3. SEO网站外链全自动在线发布工具PHP源码
  4. 说信任区块链时究竟在信任什么?
  5. ios 禁用滑动手势_如何禁用笔记本电脑上的Windows 8滑动手势?
  6. 互联网金融年化收益率集体“破五”指日可待
  7. 机器学习 - 什么是机器学习
  8. 服务器拒绝了您发送离线文件的请求,服务器拒绝了您发送离线文件”解决方法...
  9. Ant X6 简单流程图运用
  10. Romberg(龙贝格)积分法