最大公约数(gcd)

最大公约数(gcd)

很多题目中都要用到,非常的好用,但是理论很难,请仔细耐心阅读

更相减损术(九章算术)

a,bN,abgcd(a,b)= gcd(b,ab) = gcd(a,ab)
a,bN,有 gcd(2a,2b) = gcd(a,b)2

证明如下:(a|b表示b可以被a整除)
第一个: 对于a,b的最大公约数d,因为d|a,d|b,所以d|(ab).因此d也是b,ba的公约数.
所以a,b,ab的公约数集合相同,于是它们的最大公约数也亦然相等

第二个: 显然,略

得证

欧几里得算法

a,bN,b0 , gcd(a,b) = gcd (b,a mod b)

证明如下:

a<b,则gcd(b,amodb) = gcd(b,a) = gcd(a,b), 成立
ab,不妨设a = qb+r其中 0r<b,显然 r=amodb对于a,b的任意公约数d,因为d|a,d|(qb),故d(aqb),即d|r因此d也是b,r的公约数.所以a,b,amodb的公约数集合相同,最大公约数也相等

得证

代码实现如下:

int gcd(int a,int b){
	return b ? gcd(b,a%b) : a;
}
posted @   hewt  阅读(287)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
最大公约数(gcd)更相减损术(九章算术)欧几里得算法
点击右上角即可分享
微信分享提示