将EGCD方程转换为Python

时间:2019-03-15 03:08:42

标签: python

尝试将此EGCD方程转换为python。

egcd(a, b) = (1, 0), if b = 0
= (t, s - q * t), otherwise, where
q = a / b (note: integer division)
r = a mod b
(s, t) = egcd(b, r)

我使用的测试是egcd(5,37),应该返回(15,-2)但返回(19.5,-5.135135135135135)

我的代码是:

def egcd(a, b):
    if b == 0:
        return (1, 0)
    else:
        q = a / b # Calculate q
        r = a % b # Calculate r
        (s,t) = egcd(b,r) # Calculate (s, t) by calling egcd(b, r)
        return (t,s-q*t) # Return (t, s-q*t)

2 个答案:

答案 0 :(得分:1)

a / b在Python 3中是“真除法”,即使两个操作数均为int s,结果也不会截断浮点数。

要解决此问题,请改用//(即楼层划分):

q = a // b

use divmod可以将除法和余数作为一个单独的计算来执行,从而替换了以下两行:

q = a / b
r = a % b

仅:

q, r = divmod(a, b)

答案 1 :(得分:0)

q = a / b的{​​{1}}更改为