实现扩展Euclid算法

问题描述 投票:0回答:2

为什么Extended Euclid Algorithm的以下实现失败了?

def extended_euclid(a,b):
    if b == 0:
        return {a, 1, 0}

    d1,x1,y1 = extended_euclid(b, a % b)
    d = d1
    x = y1
    y = x1 - math.floor(a/b) * y1
    return {d, x, y} 
python algorithm computer-science
2个回答
0
投票

这是在https://en.wikibooks.org/wiki/Algorithm_Implementation/Mathematics/Extended_Euclidean_algorithm中找到的实现,看起来类似于你的实现。

def egcd(a, b):
    if a == 0:
        return (b, 0, 1)
    else:
        g, x, y = egcd(b % a, a)
        return (g, y - (b // a) * x, x)

1
投票
def extended_euclid(a,b):
    if b == 0:
        return a, 1, 0

    d1,x1,y1 = extended_euclid(b, a % b)
    d = d1
    x = y1
    y = x1 - math.floor(a/b) * y1
    return d, x, y

从你的回归中删除{}。看看d1,x1,y1 = extended_euclid(b, a % b),如果你在{}保留return,你没有足够的价值来打开包装。

© www.soinside.com 2019 - 2024. All rights reserved.