最大公约数(gcd)
很多题目中都要用到,非常的好用,但是理论很难,请仔细耐心阅读
更相减损术(九章算术)
∀a,b∈N,a⩾b 有 gcd(a,b)= gcd(b,a−b) = gcd(a,a−b)
∀a,b∈N,有 gcd(2a,2b) = gcd(a,b)∗2
证明如下:(a|b表示b可以被a整除)
第一个: 对于a,b的最大公约数d,因为d|a,d|b,所以d|(a−b).因此d也是b,b−a的公约数.
所以a,b,a−b的公约数集合相同,于是它们的最大公约数也亦然相等
第二个: 显然,略
得证
欧几里得算法
∀a,b∈N,b≠0 , gcd(a,b) = gcd (b,a mod b)
证明如下:
若a<b,则gcd(b,amodb) = gcd(b,a) = gcd(a,b), 成立
若a⩾b,不妨设a = q∗b+r其中 0⩽r<b,显然 r=amodb对于a,b的任意公约数d,因为d|a,d|(q∗b),故d(a−qb),即d|r因此d也是b,r的公约数.所以a,b,amodb的公约数集合相同,最大公约数也相等
得证
代码实现如下:
int gcd(int a,int b){
return b ? gcd(b,a%b) : a;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】