Python gcd列表

时间:2015-03-22 12:51:03

标签: python greatest-common-divisor

我想计算一个数字列表的gcd。 但我不知道我的代码有什么问题。

A = [12, 24, 27, 30, 36]


def Greatest_Common_Divisor(A):
    for c in A:
        while int(c) > 0:
            if int(c) > 12:
                c = int(c) % 12
            else:
                return 12 % int(c)
    print Greatest_Common_Divisor(A)

11 个答案:

答案 0 :(得分:6)

从python 3.9开始,python内置支持在数字列表上计算gcd。

import math
A = [12, 24, 27, 30, 36]
print(math.gcd(*A))

输出:

3

答案 1 :(得分:3)

def gcd (a,b):
    if (b == 0):
        return a
    else:
         return gcd (b, a % b)
A = [12, 24, 27, 30, 36]
res = A[0]
for c in A[1::]:
    res = gcd(res , c)
print res

ideone link

答案 2 :(得分:3)

这是我用过的代码片段:

from fractions import gcd
from functools import reduce
def find_gcd(list):
    x = reduce(gcd, list)
    return x

答案 3 :(得分:1)

我不清楚为什么你在你的功能中使用12?你想用12专门测试你的算法吗?

内置函数提供了this answer

中引用的良好解决方案(fraction.gcd()

如果你想开发自己的方法,你可以这样做:对列表进行排序并获得最小数量的列表(称之为min)。从2循环到min,你可以获得列表中很好的公约数。

答案 4 :(得分:1)

如果您想使用现有方法,请尝试`np.gcd.reduce'

import numpy as np

A = [12, 24, 27, 30, 36]

print(np.gcd.reduce(A))

返回3

答案 5 :(得分:0)

return退出该功能。在for循环中,通常不打算这样做。

答案 6 :(得分:0)

我看到你的代码只会进入无限循环。由于您以递归方式调用方法Greatest_Common_Divisor但没有基本情况。对齐 打印Greatest_Common_Divisor(A)和" def"在同一列中,该问题将得到解决。但仍然是你的代码为每个数字ai做了什么,它需要剩余的ai%12,然后简单地打印12%(ai%12),并且它与greatCommonDivisor之间没有任何关联。 这是gcd(a,b)的简单代码,可以用于整个数组:

def gcd (a,b):
    if (b == 0):
        return a
    else:
         return gcd (b, a % b)

答案 7 :(得分:0)

from functools import reduce
def gcd(a,b):
    if a==0:
        return b 
    else:
        return gcd(b%a,a)
A = [12, 24, 27, 30, 36]
gcdp = reduce(lambda x,y:gcd(x,y),A)
print(gcdp)

我想这个会清除你的怀疑。

答案 8 :(得分:0)

import functools as f
A = [12, 24, 27, 30, 36]
g = lambda a,b:a if b==0 else g(b,a%b)   #Gcd for two numbers
print(f.reduce(lambda x,y:g(x,y),A))     #Calling gcd function throughout the list.

“ Lambda”是一个匿名函数,每次调用GCD时都会为其分配“ g”,其中包含两个数字。

“ Reduce”是“ functools”模块中的一个函数,用于对列表中的所有元素执行特定功能。 在这里reduce()通过计算前两个元素的GCD来计算完整列表A的GCD,然后通过先前计算的前两个元素的GCD来计算第三个元素的GCD,等等。

希望这可以消除您的疑问。

答案 9 :(得分:0)

我使用了这段代码:

def gcd(my_list):
    result = my_list[0]
    for x in my_list[1:]:
        if result < x:
            temp = result
            result = x
            x = temp
        while x != 0:
            temp = x
            x = result % x
            result = temp
    return result 

答案 10 :(得分:0)

def find_gcd(l):
    def gcd(a, b):
        while b:
            a, b = b, a%b
        return a
    n =1
    f = l[0]
    while n != len(l):
        f = gcd(f,l[n])
        if  f == 1:
            return 1
        else:
            n = n + 1          
    return f

l = [12, 24, 27, 30, 36]
print(find_gcd(l))