将EGCD方程转换为Python

将EGCD方程转换为Python,python,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.135135) 我的代码是: def egcd(a, b): if b == 0:

正在尝试将此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.135135)

我的代码是:

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)

在Python 3中,将
q=a/b
更改为
q=a//b

a/b
为“真除法”。即使两个操作数都是
int
s,结果也是非截断浮点除法

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

或将除法和余数作为单个计算执行,替换这两行:

q = a / b
r = a % b
只要:

q, r = divmod(a, b)

更改
q=a/b
q=a//b
q, r = divmod(a, b)