我想计算一个数字列表的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)
答案 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
答案 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))