求最大公约数(最大公因数)—— 欧几里得算法
创作时间:
作者:
@小白创作中心
求最大公约数(最大公因数)—— 欧几里得算法
引用
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;
}
本文原文来自博客园
热门推荐
心肌炎严重后果
猫咪恐惧时易尿失禁,需关注心理状态。
菠萝和海鲜能一起吃吗
核桃仁的热量及营养成分
蜂蜜炼制:蜜蜂辛劳与自然恩赐的魔法之旅
如何编写完美的PRD文档格式?【附图详细解析】
宋代地方监察制度:从路级到州级的监察体系
宋王朝:上承隋唐,下启明清,宋朝的监察体系都进行了那些完善
《思考,快与慢》揭秘:为何你时而明智时而迷糊?双系统模型来解答!
绝缘子的结构与功能详解:从材料到应用的全面解析
惊吓后出现虚汗和晕厥的可能原因是什么
手抖就是帕金森病吗?NO,NO,NO!
阿奇霉素干混悬剂0.1g儿童用量一天几次 阿奇霉素干混悬剂说明书
人民币汇率延续双向波动,外汇供求缺口收窄——2月外汇市场分析报告
数智化赋能传统产业转型升级 透过案例感受高质量发展澎湃动能
首个《特殊儿童阅读书目》发布,精选900本(套)童书助力特殊儿童阅读
海藻钙是什么?探索海藻钙的用途、功效及营养指南
国外PLC控制系统实例探析
汽车大灯灯泡更换详解及区块链技术应用展望
高血压的食疗方法怎么吃
属相与性格特征:科学分析揭示生肖影响
伊万回应27人名单争议:主要看球员联赛状态 2国青新星是国足未来
减肥可以帮助解决发腮问题吗
减肥可以帮助解决发腮问题吗?医生的专业解答来了
如何发布有效的租房消息?怎样提高租房消息的关注度?
《红楼梦》的文学艺术:金簪雪里埋与薛宝钗的结局
中医认为便血的原因
深圳:探索少年警营建设 提升安全防范意识
打通“双向四维” 培育工业软件人才
A4纸和A3纸有什么区别?