计算GCD - 如何检查列表中的每个元素

时间:2017-07-26 01:39:21

标签: python algorithm list greatest-common-divisor

  • 多个号码输入
下面是我选择开始编写代码的方式

def main():

numbers = input()
if numbers == "0":
    exit()
else:
    number_list = [int(i) for i in numbers.split()]

def calculate_gcd(number_list):
    for i in range(1,smallest_number(number_list)+1):
        for n in range(0,len(number_list)):
            if number_list[n] % i == 0:
               check_list += number_list[n]

more code - but not important for the question im asking
my code was hardly complete and only worked for max 3 size lists, sadly.

我如何看待逻辑

  1. 阅读输入 - >按空格划分,将其列入清单
  2. 对列表进行排序
  3. 制作变量(除数),并将其设置为1
  4. while divisor< = sortedlist [0](列表中最小) 的 5。如果每个元素%divisor == 0,那么gcd = divisor,则divisor + = 1
  5. 循环直到它不再成立
  6. 我发现问题

    1. 它需要愚蠢的努力,它实际上不会运行并给出运行时错误。
    2. 我无法找到检查 No.5 的方法(以粗体显示) 我知道有gcd功能,但它只处理两个输入。 它归结为同样的问题,我如何确保所有'元素分为零?
    3. 有关制作gcd逻辑和评论No.5(粗体)的任何建议吗?

      谢谢

1 个答案:

答案 0 :(得分:2)

为什么不解决一个小问题,而不是解决更大的问题。你怎么找到两个数字的gcd?嗯,这有多种算法。让我们使用迭代的:

def gcd_iterative(a, b):
    while b:
        a, b = b, a % b
    return a

现在,有一点需要注意的是,如果你有多个数字,而你想找到所有数字的gcd,那么它就是:

gcd(gcd(...(a, b), c), ...)

简单来说,如果您想找到三个数字(a,b,c)的gcd,那么您将执行以下操作:

gcd = gcd_iterative(a, b) 
gcd = gcd_iterative(gcd, c)

所以,现在如果您有一个数字列表lst,您可以执行以下操作:

>>> gcd = lst[0]
>>> for num in lst[1:]:
        gcd = gcd_iterative(gcd, num)
>>> print(gcd)