求最大公约数(最大公因数)—— 欧几里得算法
创作时间:
作者:
@小白创作中心
求最大公约数(最大公因数)—— 欧几里得算法
引用
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;
}
本文原文来自博客园
热门推荐
深国交深中贝赛思领衔!2025-26年深圳国际学校最新排名出炉!
如何进行软件产品的智能算法集成
国庆假期,北京这六处河湖滨水空间邀您赏游
启示录武器载具属性搭配攻略
聚酯纤维的特点、应用及未来发展前景全面解析
非京籍家属无社保,可以参与北京家庭小客车指标摇号吗?
左氧氟沙星可以治疗肠胃炎吗
如何制定有效的IT规划?
技术路线图的更新频率是多少?
如何正确地接纳自己缺点和自己和解,才能遇到更好的自己
AIGC绘画设计基础:全网最全Midjourney图片优化关键词咒语汇总
钾的相对原子质量及用途
如何在Windows 11上退出安全模式?这里提供详细步骤
订单飙升2.6倍,民宿如何成为乡村振兴“金钥匙”?
宝宝接种麻腮风疫苗时间规定,最晚接种月龄要知晓
雷锋的故事:红色经典的时代价值与现实意义
什么是追加协议
最新北大报告!2025年中国文化产业发展十大趋势发布
净资产收益率的含义
如何确保Web地址是否正确
新能源汽车电机控制系统介绍
健康管理项目如何收费
最新研究:运动无法抵消高脂饮食对心脏的伤害
与死神赛跑!多学科合作成功救治脑疝危象患儿
嘶 嘶 嘶 嘶 ~~蛇出没!防蛇咬安全指南请收好
包牙冠后牙龈肿痛怎么办?六大原因及应对策略全解析
抱犊寨风景区:探秘历史遗韵,领略自然奇观
古代刑法中的刑罚方式:尺子打脚的历史与法理分析
胃一阵一阵的绞痛怎么办
职工请病假需提供哪些证明材料?