更相减损术(辗转相减法)

更相减损术:已知两数ab,求gcd(a,b)

不妨设ab,若a=b,则gcd(a,b)=a=b,否则对于所有d|a,d|b,可以证明d|ab

证明d|ab如下,设a=k1×db=k2×d,因为a>b,所以一定有(k1>k2)。所以ab=(k1k2)×d,又因为k1k2,所以d|ab,故得证。

因此,ab所有公因数都是abb的公因数,即gcd(a,b)=gcd(b,ab)

算法优化

如果a>>b(>>表示远大于),那么这个算法时间复杂度是O(|a|)的。

那考虑优化,若2|a,2|bgcd(a,b)=2×gcd(a2,b2),否则若2|a,2b2|b)同理,gcd(a,b)=a2,b,再如果2a,2b时,那么一定2|ab,那么又回到2|a,2b的情况了,优化后的算法是O(log n)的。

证明如下,每次操作一定至少能将ab之一减半。否则2|ab,回到上一种情况,算法最多进行O(log n)次。

posted @   wangyuanbo  阅读(32)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示