求最大公约数(最大公因数)—— 欧几里得算法
求最大公因数
求两数的最大公因数通常的做法是对两个数因式分解,找出共同的素数,然后求出最大公因数(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; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)