实施扩展欧几里得算法
Implementing Extended Euclid Algorithm
为什么 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}
这是在 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)
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
从您的 return 中删除 {}
。
看看 d1,x1,y1 = extended_euclid(b, a % b)
,如果将 {}
保留在 return
.
中,则没有足够的值来解压
为什么 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}
这是在 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)
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
从您的 return 中删除 {}
。
看看 d1,x1,y1 = extended_euclid(b, a % b)
,如果将 {}
保留在 return
.