a = 8
b = 6
gcf = 999
while a % gcf != 0 and b % gcf != 0:
gcf -= 1
print(gcf)
我正在努力获得两个数字的最大公因子。我得到了8和6作为例子。当我运行代码时,它给出了8而不是我期待的2。我虽然因为我在while循环中有and
,但它会通过给出满足两个语句的结果来结束循环。
答案 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
,您应该从a
和b
开始,因为gcf
不会更大比他们中的任何一个。此外,您需要将and
替换为or
,因为您希望不断更改gcf
,直到它将a
和b
分开,这样您就可以循环播放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