欧几里得算法:求解最大公约数的古老智慧
创作时间:
作者:
@小白创作中心
欧几里得算法:求解最大公约数的古老智慧
引用
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;
}
通过以上代码,我们可以看到迭代和递归两种实现方式都能正确计算出两个数的最大公约数。这种方法不仅简单易懂,而且在处理大数时效率远高于因式分解法。
热门推荐
《铠甲勇士-星曜诀醒》:国潮文化下的超级英雄新篇
《铠甲勇士刑天》:角色设定与剧情深度的双重突破
打造完美开场白:5种方式让你瞬间抓住听众
职场新人沟通攻略:4大场景实用话术与实战案例
告别演讲恐惧:8大原因+4大对策助你成为自信演说家
从汇报到决策:结构化思维在职场中的四大应用场景
贾玲、刘亦菲、赵丽颖:2024年当红女明星的三重奏
从选购到使用:一文掌握电视液晶屏清洁要领
电视屏幕上的偏振膜:如何让液晶显示成为可能
肾炎患者预防肾钙化:从基础疾病控制到定期检查
葛花真假难辨,中医专家教你四步鉴别
葛花解酒护肝效果获科学证实,还能多重保健
葛根:降糖降脂又护肝,养生界全能选手
蓄电池充电的正确接法是什么?如何确保蓄电池充电安全?
库拉耶斯:从红军战士到“女神”的蜕变
领导要来检查?这份迎检指南请收好
护肤顺序有讲究:5个步骤+5种搭配让护肤品更有效
最新研究证明不健康饮食与消化系统癌症风险密切相关
东莞美食:鱼米之乡的特色佳肴
重大突破!新型电解质让电动汽车电池更耐用
春运今日开启,除夕火车票开售,京广沪等成热门
北流市必尝美食攻略:从鸭塘鱼到沙窿助,领略地道北流风味
《失落星环》库拉角色深度评测:群体控制与石化效果的完美结合
《拳皇》库拉:冰系萌妹的暴力美学
北流市必打卡特色美食攻略
护理技巧分享:正确使用热敷仪
老年人家用理疗仪的精选推荐及选购建议
凤梨vs菠萝:营养价值、食用禁忌与选购指南
红枣补气血,妈妈再也不用担心我头晕啦!
气血不足?中医教你五禽戏养生