最大公约数 下
来源:互联网 发布:知乎白云先生最新文章 编辑:程序博客网 时间:2024/05/14 05:35
这个算法基于这样一个事实,gcd(a,b) == gcd(b,a%b),这个事实的意义在于两个参数都在->0,它的收敛速度要超过上面的我的算法,所以速度也就更快。这个等式的证明很简单,若c = a % b,则有 c = a - nb,由gcd(a,b) = r
,有a|r, b|r,所以c = a|r - nb|r,即c|r,所以gcd(b,a%b)也为r。
另外这个算法经过扩展可以解决 ax + by = gcd(x,y)这样的一元二次方程的解。
def ext_gcd(a,b,x,y): #a'x + b'y = gcd(a',b') == gcd(a,b) ==r
if b == 0:
x = 1
y = 0
return x,y,a
x,y,r = ext_gcd(b,a%b,x,y)
x_copy = x #因为a' = b, b' = a - a/b*b (/为trunc所以结果不为a), 将这2个等式带入a'x + b'y = r,我们有bx + ay - ay/b*b,移项有ay + b(x-y/b*b) = r(这样移结果不对a(y-y/b*b) + bx = r),所以我们有x = y,
y = x - y / b * b
x = y #迭代回去
y = x_copy - y * a / b #迭代回去
return x,y,r
- 最大公约数 下
- 最大公约数
- 最大公约数
- 最大公约数
- 最大公约数
- 最大公约数
- 最大公约数
- 最大公约数
- 最大公约数
- 最大公约数
- 最大公约数
- 最大公约数
- 最大公约数
- 最大公约数
- 最大公约数
- 最大公约数
- 最大公约数
- 最大公约数
- 常用工具
- Linux下搭建Telnet和Ftp配置
- rake abort! Rails mysql2 error: “rake aborted! Please install the mysql2 adapter…”解决方案
- windows消息机制
- [翻]Why call it Apps and not Oracle ERP ?
- 最大公约数 下
- libxml2常用函数集锦之三
- lucene 3.4 contrib/facet 切面搜索
- 数据库区分大小写,数据表区分大小写
- 优化网站性能的14条准则
- IEEE 802.11 saturated and non-saturated
- 手机停机照样可以免费无限量上网
- 将数据转换成JSON
- android ndk 调用第三方so