欧几里得算法:求解最大公约数的古老智慧
创作时间:
作者:
@小白创作中心
欧几里得算法:求解最大公约数的古老智慧
引用
1
来源
1.
https://www.cnblogs.com/1873cy/p/18469778
欧几里得算法,又称辗转相除法,是求两个数最大公约数(GCD)的高效算法。这种方法避免了因式分解的复杂性,特别适用于处理大数。本文将详细介绍欧几里得算法的基本原理、具体步骤,并提供C++语言的迭代和递归实现代码。
欧几里得算法简介
欧几里得算法(又称辗转相除法)用于计算两个数的最大公因数,被称为是世界上最古老的算法。其基本思想是:两个正整数a和b,它们的最大公约数(gcd(a,b))与b和a除以b得到的余数的最大公约数(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;
}
通过以上代码,我们可以看到迭代和递归两种实现方式都能正确计算出两个数的最大公约数。这种方法不仅简单易懂,而且在处理大数时效率远高于因式分解法。
热门推荐
住建部第一批城市更新典型案例推介Ⅱ——城镇老旧小区改造类
婺源地名:从赋名到富民
呼吸困难?揭秘这些隐藏在日常中的健康杀手!
耳朵后面痛什么原因引起的
观音菩萨的东方慈悲智慧法相
8个最佳开源内网穿透工具
硕士论文研究背景怎么写好
企业指标体系搭建指南:四大原则、关键步骤与管理方法
喝出来的健康隐患:可乐当水,肾结石怎么办?
怀孕教师该如何办理补贴申请手续?
天天喝咖啡会影响大姨妈吗
脊柱外科手术设备有哪些?高端脊柱外科手术器械介绍
19岁美国男孩1.6周密集训练改善脊柱侧弯、假性长短脚及骨盆歪斜
诉讼标的:民事诉讼中的核心概念与实务指南
生意社:供应压力仍在 豆粕行情持续探底
员工弹性上班制度:法律视角下的合规性与实践分析
更正申报网上操作流程详解:三种系统申报方式全攻略
中医传统外治技术全解析
股票解除质押对股价有何影响
禁渔禁捕:法律视角下的渔业资源保护与管理
older和elder的区别用法
无主之地3配置要求是什么?显卡和内存需要多少?
复方丹参片对血小板有影响吗
服用中药真的会导致血小板减少吗?
婚姻家庭法的重要性与感悟:维护家庭和谐与社会稳定
马关条约主要内容及其历史影响
汤圆大变身!6种创意新吃法,让你爱上这颗小圆球
《道德经》第七十一章:知不知与不知知的智慧
《道德经》第七十一章:知不知,上;不知知,病
怎么注册公司:从零到一,全面解析企业注册流程