求最大公约数(最大公因数)—— 欧几里得算法
创作时间:
作者:
@小白创作中心
求最大公约数(最大公因数)—— 欧几里得算法
引用
1
来源
1.
https://www.cnblogs.com/1873cy/p/18469778
在数学和计算机科学领域,求两个数的最大公约数(GCD)是一个常见的问题。本文将介绍一种古老而高效的算法——欧几里得算法(辗转相除法),用于解决这一问题。
求两数的最大公因数通常的做法是对两个数因式分解,找出共同的素数,然后求出最大公因数(GCD)。但是当数字越大时,因式分解就越困难,此时,使用欧几里得算法就能高效求出其最大公因数。
欧几里得算法
欧几里得算法(又称辗转相除法)用于计算两个数的最大公因数,被称为是世界上最古老的算法。
基本思想
两个正整数 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 的最大公约数。
算法实现
#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;
}
欧几里得算法不仅历史悠久,而且在现代计算机科学中仍然发挥着重要作用。无论是迭代实现还是递归实现,都能高效地解决最大公约数的计算问题。
热门推荐
盐酸胺碘酮片的副作用全解析:从监测到预防
著作权法分类案例解析:如何保护自己的创作权益
感恩节必学:敬酒词让你成为全场焦点!
《诗经》里的敬酒词:从礼乐到狂欢的酒文化
内江经济开新局:稳中求进,潜力迸发
如何烹饪才能留住维生素B族?
营养师推荐:糙米和牛奶,你的维生素B族补给站!
维生素B2,你真的补够了吗?
秋冬养生:如何科学补充维生素B族?
嵩山少林寺武校毕业生就业前景大揭秘
嵩山少林武校:孩子学武的最佳选择?
中考满分与备考策略:学生心理素质与知识储备的重要性分析
驾驶员行车安全知识培训对企业车队管理的影响是什么
理解城市|保护遗产与发展旅游,丽江古城如何二者兼得?
抗心律失常药物:房颤患者的福音?
嵩山少林武术学校:青少年身心健康首选
忘记163邮箱账号?别慌!多种找回方法详解
广东湛江少林武校:文武双全的培养之旅
全国31省前三季度人均可支配收入公布:四川25687元,排名第17位
维生素B族缺乏症的预防秘籍
维生素B族真的能抗压吗?一文读懂它的神奇功效!
动物内脏:补充维生素B族的优质选择
宋江武校:水浒文化的传承与创新
郓城宋江武校:三十余年武术教育的卓越传承
职场人必知:盐酸普罗帕酮片正确用法
心律不齐?盐酸普罗帕酮片正确服用指南
白山交警教你学车期间的安全驾驶技巧
新手学车攻略:从零开始掌握驾驶技巧
少林寺塔沟武校:从春晚到世界舞台
塔沟武校再曝虐童事件:从万人武校到信任危机