如何结束while循环以获得最大公因子

时间:2018-05-28 22:14:51

标签: python python-3.x while-loop

a = 8
b = 6
gcf = 999
while a % gcf != 0 and b % gcf != 0:
    gcf -= 1
print(gcf)

我正在努力获得两个数字的最大公因子。我得到了8和6作为例子。当我运行代码时,它给出了8而不是我期待的2。我虽然因为我在while循环中有and,但它会通过给出满足两个语句的结果来结束循环。

2 个答案:

答案 0 :(得分:0)

您的实施

关于你的实现,你想循环,直到两个模运算都为零,这意味着循环只要一个or另一个非零。另请注意, gcf 不能大于两个数字的最小值。

a = 8
b = 6
gcf = min(a, b)  # This is the max value your gcf can take

while a % gcf or b % gcf:  # Use 'or' in your condition
    gcf -= 1

print(gcf) # 2

内置math.gcd

虽然,对于足够大的数字,您希望使用使用Euclidian Algorithm的更高效的实现,这就是math.gcd的作用。请注意,gcd代表最大公约数,它是您要查找的数字的数学名称。

import math

math.gcd(8, 6) # 2

答案 1 :(得分:0)

首先,为了更快地搜索gcf,您应该从ab开始,因为gcf不会更大比他们中的任何一个。此外,您需要将and替换为or,因为您希望不断更改gcf,直到它将ab分开,这样您就可以循环播放a = 8 b = 6 gcf = min(a, b) # minimum of a and b while a % gcf != 0 or b % gcf != 0: # OR instead of AND gcf -= 1 print(gcf) # => 2 分开其中一个。

您的代码将是:

SKIP LOCKED