求最大公约数(最大公因数)—— 欧几里得算法
创作时间:
作者:
@小白创作中心
求最大公约数(最大公因数)—— 欧几里得算法
引用
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;
}
本文原文来自博客园
热门推荐
普通人有必要补充叶黄素吗?
PID的含义及查看方法(macOS系统和Windows系统)
中国物流行业深度研究报告:产业链、政策背景、竞争格局与发展趋势
四川大学华西团队揭秘:乙酸通过脑-肠轴调节睡眠质量的新机制
哪一项传统武术项目入选了人类非物质文化遗产代表作名录?
提升沟通技巧:让说话成为连接彼我的桥梁
如何正确提交员工离职单?
色盲的治疗方法有哪些
深入解析形成性考核,如何通过持续反馈提升学习效果
效率翻倍,如何使用Google高级搜索
用AI打造高效MVP,你也可以!
广州这些避世的小众艺术空间,一点不输公立美术馆
失眠用药「思诺思」冲上热搜,医生表示:治疗失眠还有多种方法
人事行政工作流程中哪些环节可以自动化?
深圳能待一整天的10个免费室内场馆!
春节必备年糕:从北到南,各地都有自己的独特风味
如何写出令人感动的文字,跟朱自清学写作
老年人头晕的六大原因及应对指南
起名如何讲究声音韵律
“微醺”才能有灵感?追寻“学术酒吧”起源
《阿凡达2》热映,影院如何用票房数据优化排片?
普通人如何从零开始学习AI?
分析师:比特币图表显示未来几周可能出现“决定性价格波动”
科学增肌全攻略:从计划到执行,打造完美体态
B端系统:优秀反馈机制设计,让用户爽到爆的秘诀
考取焊工证:就业与前景的双重优势
情侣间如何重拾信任?
健康科普丨癌症患者出现水肿怎么办?这些方法要记好!
2025年海外科技行业分析:AI浪潮下的产业变革与投资机遇
电磁能量像核爆,中国正在研制高功率微波武器,能颠覆战争格局