求最大公约数(最大公因数)—— 欧几里得算法
创作时间:
作者:
@小白创作中心
求最大公约数(最大公因数)—— 欧几里得算法
引用
1
来源
1.
https://www.cnblogs.com/1873cy/p/18469778
欧几里得算法,又称辗转相除法,是求解两个数最大公约数(GCD)的经典算法。这种方法通过不断用较小的数替换较大的数,并取余数,最终在余数为0时找到最大公约数。本文将详细介绍欧几里得算法的基本思想、具体步骤,并给出C++语言的迭代和递归实现方式。
欧几里得算法
欧几里得算法(又称辗转相除法)用于计算两个数的最大公因数,被称为是世界上最古老的算法。
基本思想
两个正整数 (a) 和 (b),它们的最大公约数 (\text{gcd}(a,b)) 与 (b) 和 (a) 除以 (b) 得到的余数的最大公约数 (\text{gcd}(b,a%b)) 相同。通过不断用较小的数替换较大的数,并取余数,最终在余数为0时找到最大公约数。
举例说明
以求 1112 与 695 这两个数的最大公约数为例:
- 首先用较大的数字除以较小的数字,求出余数,也就是堆两个数字进行模运算。得到余数 417
- 接下来再用除数 695 和余数 417 进行模运算,结果为 278。
- 继续进行同样的操作,对 417 和 278 作模运算,结果为139。
- 对 278 和 139 作模运算,结果为0,也就是说278可以被139整除。
- 余数为0时,最后一次运算中的除数 139 就是 1112 和 695 的最大公约数。
算法实现
以下是欧几里得算法的C++实现,包括迭代和递归两种方式:
#include "iostream"
using namespace std;
/*欧几里得算法—求最大公约数—迭代实现*/
int gcd(int a, int b){
while (b != 0){
int tmp = a;
a = b;
b = tmp % b;
}
return a;
}
/*欧几里得算法—求最大公约数—递归实现*/
int gcd_dg(int a, int b){
return b == 0 ? a : gcd_dg(b, a % b);
}
int main(){
cout << gcd(1112, 695) << endl;
cout << gcd_dg(1112, 695) << endl;
system("pause");
return 0;
}
本文原文来自博客园
热门推荐
流放之路2怎么提高最大魔力:魔力上限最大化攻略
MD5文件详解:概念、使用方法及安全性考量
雷军不仅造手机造车厉害,养娃更牛!培养女儿的方式颠覆常人认知
薄膜铌酸锂在光子集成中的应用
拉便时使用手机会引发肠癌吗
腹膜后多淋巴结影:可能原因、诊断与注意事项
德国国花是矢车菊
每天倒走20分钟 收获6大意想不到的益处
声音美学:如何区分迷人的声音和好听的声音
少儿互助金是不是基本医疗保险
如何判断ChatGPT的回答是否准确
苏州怡园:居尘出尘
结合文学典籍的女孩名字大全:古典韵味与文化内涵的完美融合
16+8轻断食:科学减肥新选择,不止是减重那么简单
月子里为什么不能碰冷水
空气质量对健康的影响
两人开店无合同的风险与应对策略
直立划船、侧平举动作,适合使用大重量吗?了解哑铃臂的屈伸动作
3C认证:确保产品质量,赢得市场信任与安全保障
农药与肥料混用原则
如何查月柱天干地支:生辰八字查询与分析指南
人工智能如何改变时尚行业的可持续性和循环性?
数学天才欧拉:创作出万能的“上帝公式”,曾一度被怀疑是穿越者
穆阿维叶:将哈里发由选举制改为世袭制,开创了倭马亚王朝
成年人拔智齿风险一览:从轻到重全知道
商朝国君商汤的姓氏与祖先探秘
全国派出所上班时间是几点?
换个城市工作,社保要不要转移?这篇详解帮你理清思路
云南旅游攻略6月(云南6月旅游哪里适合)
白雪公主不是被王子救活的?早期西方经典童话曾是“暗黑”系