找回密码
 欢迎注册
查看: 5383|回复: 0

[分享] 欧几里得算法的推广形式

[复制链接]
发表于 2009-4-20 22:53:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
欧几里得算法用于计算两个非负整数的最大公约数:
  1. long gcd(long a, long b)
  2. {
  3.   if (b == 0) return a;
  4.   return gcd(b, a % b);
  5. }
复制代码
可以推广该算法,使它能计算出满足下列条件的整系数x和y:d = gcd(a, b) = ax + by
  1. // return d = gcd(a, b) = ax + by
  2. long gcd(long a, long b, long &x, long &y)
  3. {
  4.   if (b == 0) { x = 1; y = 0; return a; }
  5.   long d = gcd(b, a % b, y, x);
  6.   y -= a / b * x;
  7.   return d;
  8. }
复制代码
注意,x与y可能为0或负数。这些系数对计算模乘法的逆是非常有用的。

评分

参与人数 1鲜花 +1 收起 理由
kon3155 + 1 谢谢分享,欢迎常来!

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-5-20 05:43 , Processed in 0.046319 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表