辗转相除法和更相减损术
高中学过的求大公约数的方法就是辗转相除法和更相减损术了。
辗转相除法递归版
#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)。
辗转相除法和更相减损术相关推荐
- C++算法:辗转相除法与更相减损术
辗转相除法与更相减损术 1.我们已经学过求最大公因数的知识,你能求出18与30的公因数吗? 2.如果公因数比较大而且根据我们的观察又不能得到一些公因数,我们又应该怎样求它们的最大公因数?比如求8251 ...
- 辗转相除法与更相减损术(求最大公约数)
辗转相除法:两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数.比如10和25,25除以10商2余5,那么10和25的最大公约数,等同于10和5的最大公约数. ...
- C语言复习---获取最大公约数(辗转相除法和更相减损法)
源自:百度百科 辗转相除法 辗转相除法:辗转相除法是求两个自然数的最大公约数的一种方法,也叫欧几里德算法. 例如,求(319,377): ∵ 319÷377=0(余319) ∴(319,377)=(3 ...
- 辗转相除法、更相减损法、Stein算法
最大公约数和最小公倍数求解,常用的方法是短除法进行因式分解,然后最大公约数是所有公共因子的乘积,最小公倍数是所有因子的乘积. 本质上求最小公倍数就是求最大公倍数:x=m*a, y=m*b:m是最大公约 ...
- 初等数论--整除--欧几里得算法/辗转相除法/更相减损术
初等数论--整除--欧几里得算法/辗转相除法/更相减损术 欧几里得算法/辗转相除法/更相减损术 博主本人是初学初等数论(整除+同余+原根),本意是想整理一些较难理解的定理.算法,加深记忆也方便日后查找 ...
- 求最大公约数和最小公倍数——辗转相除法(欧几里得算法)、更相减损术、stein算法
辗转相除法-- 辗转相除法求最大公约数的原理: 两个整数其中较小的数 和 两数相除(较大数除较小数)的余数(使用递归)的最大公约数. 辗转相除法求最小公倍数的原理: 两个整数分别除以最大公约数的结果相 ...
- 更相减损术,辗转相除法
一,更相减损术是出自<九章算术>的一种求最大公约数的算法,它原本是为约分而设计的,适用于任何需要求最大公约数的场合. 证明: 设gcd(x,y)=d,则满足x=k1*d,y=k2*d,易得 ...
- 求最大公约数(更相减损术辗转相除法)
求解最大公约数的多种Way: 1 暴力解决法:M不断自减找到最大公约数. 2 辗转相除法:反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数. 3 更相减损术:若两者都为偶数,进行折半,直到 ...
- 【C语言】辗转相除法+更相减损术+秦九韶算法
一.辗转相除法 1.简介 辗转相除法又叫欧几里得算法. 假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里得算法,是这样进行的: 1997 / 615 = 3 (余 152) 615 ...
最新文章
- python name is not defined_PythonNameError: global name 'NAME' is not not defined这个问题怎么解决?...
- 谈谈基于OAuth 2.0的第三方认证 [上篇]
- Windows 技术篇-搜狗输入法中文状态下却输入为英文,原因及解决办法。明明是中文却输入不了中文,只能输入英文
- 私有云Opetstack的创建与运用
- boost::callable_traits添加const成员的测试程序
- OpenCV中cvAdds和cvAdd中的mask的用法探讨
- C编程实践:简单的通讯录
- scheme 微博_可用App URL Schemes
- ADI交替差分隐格式求解二维热传导方程
- Hamilton哈密顿最短路径(二进制状态压缩)
- 电脑使用者必备的文本编辑器,哪款适合你?
- 《地理天机一贯 》 聚宝馆手抄珍稀古籍分享
- 匈牙利命名法为何被淘汰_体育午报:15年魔咒破除!国足淘汰赛终迎一胜
- 网络地址转换——NAT
- 设计师需要的知识体系
- MACD指标为什么不灵了?试试QMACD
- 快乐AK场2 E 	删删删越小越好 单调栈
- (ICRA 2020) Instance Segmentation of LiDAR Point Clouds
- Java培训四个月能学会吗
- mysql存图片二进制文件_将图片(二进制文件)存储于数据库,论文件字节流与二进制字符串相互转换...
热门文章
- 用日记本文档怎么写html,Win7系统如何使用日记本文档输入文字?
- android 访问存储卡,Android:无法访问存储在SD卡中的文件
- SEO网站外链全自动在线发布工具PHP源码
- 说信任区块链时究竟在信任什么?
- ios 禁用滑动手势_如何禁用笔记本电脑上的Windows 8滑动手势?
- 互联网金融年化收益率集体“破五”指日可待
- 机器学习 - 什么是机器学习
- 服务器拒绝了您发送离线文件的请求,服务器拒绝了您发送离线文件”解决方法...
- Ant X6 简单流程图运用
- Romberg(龙贝格)积分法