求最大公约数(最大公因数)—— 欧几里得算法
创作时间:
作者:
@小白创作中心
求最大公约数(最大公因数)—— 欧几里得算法
引用
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;
}
欧几里得算法不仅历史悠久,而且在现代计算机科学中仍然发挥着重要作用。无论是迭代实现还是递归实现,都能高效地解决最大公约数的计算问题。
热门推荐
夜梦惊魂:解析噩梦后的心慌与应对策略
中药配方:促进骨骼愈合的中医疗法
了解84消毒液:毒性降解周期与日常使用指南
做清蒸鳊鱼,蒸几分钟合适?牢记4点细节,蒸出来好鲜嫩,很实用
一个商品的毛利率怎么算?从基础公式到实战应用
整车开发流程详解:从概念设计到量产的关键环节
代表建议:加强青少年社会与情感能力培养
1-7岁海外幼儿不可错过的7部中文动画片(2025年)
超越技术思维:打造高效创新团队的秘诀
如何应对音乐版权纠纷?——从商场背景音乐侵权案谈起
革兰氏阴性菌细胞壁大揭秘:结构和组成全知道
如何水煮软嫩的鸡胸肉
人工颈椎间盘置换:一种「脱胎换骨」的手术
提升员工技能的关键:轮岗培训的重要性与实施策略
我国成为全球百岁老人最多的国家!这个省份最多,原因是这7点!
中老年人登山指南:从新手到老手都应掌握的安全登山方法
委托合同中的授权范围与纠纷解决
在家也能做的7种有氧运动,让你足不出户也能保持好身材
例假期喝什么补气血
25考研常识:研究生备考科学高效的方法一览
全身发麻警示健康隐患?揭示背后的五大潜在原因!
家庭教育的智慧传承:将家族智慧与价值观传递给下一代
如何解决"无法识别USB设备"的常见问题与排查步骤指南
CCF YOCSEF兰州举办“大模型带来的情绪价值的利弊得失”观点论坛
这份防蛇指南请收藏,遇险不慌张!
自贡灯会璀璨绽放,AI科技引领文化创新
认识一味常见中药:端午摘艾草,有何疗效?
美白精华的作用与功效 美白精华的成分_效果_选购_使用_保存知识大全
如何监控服务器CPU和内存的使用情况?
社保补缴方式及规定