Python 中的欧几里得算法
Euclidean Algorithm in Python
您好,我正在尝试编写欧几里德的算法。在 Python 中使用 a = b*k + r 的概念。它在某些情况下可以部分工作,但在接近尾声时会搞砸。谁能帮我找出我哪里出错了?
a = int(input("Enter First Number: "))
b = int(input("Enter Second Number: "))
A = a
B = b
k = 0
r = 1
while (a!=(b*b)):
while(a>(b*k)):
k = k+1
k = k-1
r = (a-(b*k))
a = b
b = r
print (a,b) #to debug which step it is at
print("gcd(",A,",",B,") =",b)
我已经阅读了您尝试执行的操作,但我强烈建议您再次阅读 Euclidean Algorithm 的定义,以便开始对其进行编码。您试图做的是弄乱 k
的定义,并且 k 导致您的代码以过度扩展的方式循环。
编写欧几里得算法的一种简单方法是使用它的基于除法的实现。只要记住 modulus 代表什么,就可以开始了。
祝学习愉快。
感谢大家的建议,我能够进行更改并弄清楚了。
如果有人需要参考,我会 post 我的解决方案。
a = int(input("Enter First Number: "))
b = int(input("Enter Second Number: "))
A = a
B = b
while ((a%b)!=0):
K = (a/b)
k = math.trunc(K)
r = (a-(b*k))
a = b
b = r
print("gcd(",A,",",B,") =",b)
您好,我正在尝试编写欧几里德的算法。在 Python 中使用 a = b*k + r 的概念。它在某些情况下可以部分工作,但在接近尾声时会搞砸。谁能帮我找出我哪里出错了?
a = int(input("Enter First Number: "))
b = int(input("Enter Second Number: "))
A = a
B = b
k = 0
r = 1
while (a!=(b*b)):
while(a>(b*k)):
k = k+1
k = k-1
r = (a-(b*k))
a = b
b = r
print (a,b) #to debug which step it is at
print("gcd(",A,",",B,") =",b)
我已经阅读了您尝试执行的操作,但我强烈建议您再次阅读 Euclidean Algorithm 的定义,以便开始对其进行编码。您试图做的是弄乱 k
的定义,并且 k 导致您的代码以过度扩展的方式循环。
编写欧几里得算法的一种简单方法是使用它的基于除法的实现。只要记住 modulus 代表什么,就可以开始了。
祝学习愉快。
感谢大家的建议,我能够进行更改并弄清楚了。 如果有人需要参考,我会 post 我的解决方案。
a = int(input("Enter First Number: "))
b = int(input("Enter Second Number: "))
A = a
B = b
while ((a%b)!=0):
K = (a/b)
k = math.trunc(K)
r = (a-(b*k))
a = b
b = r
print("gcd(",A,",",B,") =",b)