求最大公约数(最大公因数)—— 欧几里得算法
创作时间:
作者:
@小白创作中心
求最大公约数(最大公因数)—— 欧几里得算法
引用
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;
}
欧几里得算法不仅历史悠久,而且在现代计算机科学中仍然发挥着重要作用。无论是迭代实现还是递归实现,都能高效地解决最大公约数的计算问题。
热门推荐
沧州16条河流入选省级幸福河湖!背后的故事令人称赞
沧州一日游:博物馆、铁狮子、非遗馆全攻略
探秘高郭城遗址:沧州历史的新发现!
秋冬皮肤护理全攻略:从科学护肤到中医养生
柠檬樱桃阿胶:中医食疗美容的黄金组合
贵州茅台高股息率引关注!
如何防止仙人跳?实用的安全防范指南
乐山大佛春节旅游攻略三(景点篇)
大理无量山樱花谷:冬日限定的粉色浪漫
大理旅拍打卡地,洱海边的浪漫邂逅
大理太和城遗址:南诏第一都城的历史见证
7种便秘类型,你遇到的是哪一种?针对处理更有效
大弯国家公园自驾游攻略:探秘德州最美自然景观
德州市民营经济撑起就业半边天
德州:一座见证中国历史变迁的千年古城
自来水厂用到的全套水处理设备都有哪些?
六月赛里木湖:捕捉最美瞬间
香格里拉冬游攻略:雪景与文化完美融合的冰雪世界
四月云南旅游攻略:大理、丽江、香格里拉的自然之美
诺如病毒来袭!北京协和专家教你如何饮食
吃出水嫩肌:胶原蛋白、维C、维A、维E大揭秘!
老中医教你:秋冬养肤这样做最好
深层清洁面膜:让你的肌肤告别痘痘黑头
麻将孤岛惊魂:一个家庭的亲子游戏之旅
广东麻将:周末社交的新选择!
华西医生教你健康打麻将防老年痴呆
新加坡医院推荐:老人打麻将防痴呆
【知识】薯类营养大比拼
电力行业股息分配:稳定性与可持续性的投资选择
蚂蚁团结协作的精神是什么