欧几里得算法:求解最大公约数的古老智慧
创作时间:
作者:
@小白创作中心
欧几里得算法:求解最大公约数的古老智慧
引用
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;
}
通过以上代码,我们可以看到迭代和递归两种实现方式都能正确计算出两个数的最大公约数。这种方法不仅简单易懂,而且在处理大数时效率远高于因式分解法。
热门推荐
手腕关节处长了个硬疙瘩严重吗
万国觉醒统帅培养攻略:等级提升与经验获取全解析
美国银行账户被风控怎么办?一文详解应对方法与预防技巧
电饭煲蒸饭秘籍:轻松享受米香四溢的幸福时光
百万缺口下的无人机飞手是一份什么样的职业?
专家解读:鸡蛋过敏导致脸部肿胀的正确处理方法
道家的三魂七魄详解大全
2024年北京社保缴费基数上限下限是多少?
张家界旅游指南:武陵源住宿的便利性及周边景点推荐
I-94入境表格填写2025:美国入境表格怎么填?
在高度分散的口腔市场,高质量发展
神经性皮炎怎么防治
若梦见两次以上逝去的亲人,可能是在给你这3个暗示,别不相信
睑板腺萎缩干眼症的5种缓解方法
睑板腺萎缩可以恢复吗?专业医生这样解答
《自然》:中国发现最早的鸟类,改写鸟类演化历史
陈景润:为什么我中学时读文科班
昆明房地产市场趋势分析:整体增长与区域分化并存
燃气灶突然熄火了,这是什么原因造成的?
周易第三十一卦咸卦九五爻详解 咸其脢,无悔。
白居易与刘禹锡把酒言欢,写下一首诗流传千古
白居易《咏老赠梦得》:与君俱老话桑榆
显卡也要清理垃圾文件,附操作方法
电热水器漏水了怎么办?维修与保养的实用指南
美国入境:如何在线查询和管理你的I-94记录?
「arXiv精品AI论文系列」人工意识的理论探讨、技术进展与伦理考量
封口费案件结案:公正审理取得良好效果
杭州13个区县财政收入:余杭区第1,临平区第7,桐庐县远超淳安县
洗发水能带上飞机不?飞机携带洗发水相关规定解读,通俗易懂!
DJYVP、DJYPV、DJYPVP计算机电缆详解